题解 | 二叉搜索树与双向链表
二叉搜索树与双向链表
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;
}
}
中序遍历,每次弹栈的时候修改当前节点和前面节点的指向关系,注意最后要返回最左边的节点
