剑指offer -- 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

使用非递归的中序遍历的改良版本
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;
    }
}

你可能感兴趣的:(剑指offer -- 二叉搜索树与双向链表)