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

二叉搜索树与双向链表

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

相关推荐

不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务