二叉搜索树与双向链表

将BST转成双向链表,相当于中序遍历

非递归法:

public class Solution {
 public static TreeNode Convert(TreeNode pRootOfTree) {
        TreeNode p = pRootOfTree;
        TreeNode q = null;
        if(p!=null){
            LinkedList<TreeNode> list = new LinkedList<>();
            list.push(p);//根结点入栈
            while(p.left!=null){//左子树的根节点入栈
                p = p.left;
                list.push(p);
            }
            TreeNode head = p;//题目需要输出的链表头节点
            while(!list.isEmpty()){
                p = (TreeNode)list.pop();
                if(q == null){//q指向链表当前结点的前一个结点
                    q = p;
                }
                else{
                    q.right = p;
                    p.left = q;
                    q = p;
                }
                if(p.right != null){//右子树入栈
                    list.push(p.right);
                    p = p.right;
                    while(p.left!=null){
                        p = p.left;
                        list.push(p);
                    }
                }
            
            }
            return head;
        }
        return null;
    }
}

https://en.wikipedia.org/wiki/Tree_traversal#Iterative_Traversal

posted on 2019-03-17 23:27  q2013  阅读(80)  评论(0编辑  收藏  举报

导航