二叉搜索树与双向链表

二叉搜索树与双向链表

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

核心就是中序遍历和辅助节点pre来保存上一个遍历的节点。
先右遍历,再处理节点,后左遍历,这样能返回正序的链表。

public class Solution {
    TreeNode pre = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
        if(pRootOfTree == null)
            return null;
        Convert(pRootOfTree.right);
        if(pre != null){
            pRootOfTree.right = pre;
            pre.left = pRootOfTree;
        }
        pre = pRootOfTree;
        Convert(pRootOfTree.left);
        return pre;
    }
}

在力扣上也做了这道题,发现细节处理不一样,但核心还是中序遍历

图片说明

class Solution {
    Node pre = null;
    Node head = null;
    public Node treeToDoublyList(Node root) {
        if(root == null)
            return null;
        dfs(root);
        pre.right = head;
        head.left = pre;
        return head;
    }

    public void dfs(Node root){
        if(root == null)
            return;
        dfs(root.left);
        if(pre != null){
            root.left = pre;
            pre.right = root;
        }else{
            head = root;
        }
        pre = root;
        dfs(root.right);

    }

}

这道题定义了两个辅助节点,中序返回来的结果也是倒序的,再处理第一个节点和最后一个节点的关系即可。

剑指Offer题解 文章被收录于专栏

为了之后反复练习方便查阅。

全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务