二叉搜索树与双向链表

二叉搜索树与双向链表

http://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5

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

public class Solution {
    //记录左子树的最右一个节点 有时候也指的是当前双链表的最后一个节点
    protected TreeNode lastLeft = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree == null) return null;
        if(pRootOfTree.left==null && pRootOfTree.right==null){
            lastLeft = pRootOfTree;//最右侧的叶子节点
            return pRootOfTree;
        }
        //将左子树构成双向链表(lastLeft会被更新),并返回
        TreeNode leftList = Convert(pRootOfTree.left);
        //将根节点追加到左子树构成的双向链表之后
        if(leftList != null){
            lastLeft.right = pRootOfTree;
            pRootOfTree.left = lastLeft;
        }
        //当该树只有左子树,最后一个节点是根节点
        lastLeft = pRootOfTree;
        //将右子树构成双向链表,在convert中lastLeft被更新成了右边链表的最后一个节点
        TreeNode rightList = Convert(pRootOfTree.right);
        //将左边和右边连接起来
        if(rightList != null){
            rightList.left = pRootOfTree;//这里不是lastLeft,因为在最近一个convert()调用中已被更新
            pRootOfTree.right = rightList;
        }
        return leftList==null?pRootOfTree:leftList;
    }
全部评论

相关推荐

牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务