题解 | 二叉搜索树与双向链表
二叉搜索树与双向链表
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5
import java.util.*; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree == null){ return pRootOfTree; } Stack<TreeNode> stack = new Stack<>(); TreeNode pre = null; while(pRootOfTree != null || !stack.isEmpty()){ while(pRootOfTree != null){ stack.push(pRootOfTree); pRootOfTree = pRootOfTree.left; } TreeNode curr = stack.pop(); if(pre != null){ pre.right = curr; curr.left = pre; } pre = curr; pRootOfTree = curr.right; } while(pre.left != null){ pre = pre.left; } return pre; } }
中序遍历,每次弹栈的时候修改当前节点和前面节点的指向关系,注意最后要返回最左边的节点