输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
使用非递归的中序遍历的改良版本
left – 指向前一个节点
right – 指向后一个节点
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree){
Stack<TreeNode> stack = new Stack<TreeNode> ();
TreeNode p = pRootOfTree;
TreeNode pre = null;
boolean isFirst = true; //双向链表头节点
while(p != null || !stack.empty()){
while(p != null){
stack.push(p);
p = p.left;
}
p = stack.pop();
if(isFirst){
pRootOfTree = p;
pre = p;
isFirst = false;
}else{
pre.right = p;
p.left = pre;
pre = p;
}
p = p.right;
}
return pRootOfTree;
}
}