二叉搜索树与双向链表

二叉搜索树与双向链表

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;
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-20 19:57
已编辑
某大厂 golang工程师 23.0k*16.0, 2k房补,年终大概率能拿到
点赞 评论 收藏
分享
威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务