题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

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

##二叉树搜素树转换成排序的双向的链表其实有好几种方式,但是离不开核心思想,中序遍历。把中序遍历搞明白了就懂了二叉树转换成有序链表。中序遍历有两种方式,一种递归,一种非递归。根据这两种提供几种思路,第一种,通过中序遍历把二叉排序树放入链表,然后在处理成双向链表,第二种非递归的中序,只需要一个保存上一个处理的节点就好了以及一个节点保存根节点,第三种根据非递归的也可以转换成递归的,第四种通过一个反中序,左根右,变成右根左的遍历,这样只需要保存上一个处理的节点就好了。

public class Solution {
    //当前处理过的节点,最后一次就变成头节点了
    TreeNode pre = null;
    public TreeNode Convert(TreeNode root) {
        if (root == null) return null;
        dfs(root);
        //头节点没有头节点
        pre.left = null;
        return pre;
    }
    //这个方法的含义:右根左的遍历方式,构建成双向链表,并把pre置成表头
    public void dfs(TreeNode root) {
        if (root == null) return;
        dfs(root.right);
        //上一个节点是最后一个节点不处理,如果不是,把当前节点指向右边的头节点。
        if (pre != null) {
            root.right = pre;
            pre.left = root;
        }
        //每次完成,都要把上一个处理节点变成自己
        pre = root;
        dfs(root.left);
    }
}
全部评论

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务