zoukankan      html  css  js  c++  java
  • 二叉搜索树转有序双向链表

    题目描述:

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

    解题方法:

    由于二叉搜索树的中序遍历,按照由小到大的顺序依次遍历树中的每个结点,所以可以利用中序遍历解决此题。

    使用指针last指向上一次遍历的结点,将last指向的结点与本次遍历的结点互连。

    新建一个结点head,last初始指向head;

    中序遍历的第一个结点是结点4,将last与结点4互连, 也即head与结点4互连,同时将last指向结点4;

    中序遍历的第二个结点是结点6,将last与结点6互连, 也即结点4与结点6互连,同时将last指向结点6;

    。。。

    最后断开head与结点4的链接,返回结点4.

     实现代码:

        // 新建一个结点,作为整个链表的起始点
        private static TreeNode head = new TreeNode(0);
        // 指向上个结点,初始指向head结点
        private static TreeNode last = head;
    
        // 利用中序遍历构建双向链表
        private static void convert(TreeNode node) {
            if (node == null) return;
    
            convert(node.left);
            // 将上个结点与该结点互连
            last.right = node;
            node.left = last;
            last = node;
    
            convert(node.right);
        }
    
        public static TreeNode BST2BiList(TreeNode root) {
            if (root == null) return null;
            convert(root);
            // 与head相连的结点为链表的起始点
            // 断开head与其相连结点的链接,并返回该结点
            last = head.right;
            last.left = null;
            head.right = null;
            return last;
        }
  • 相关阅读:
    Mybatis plus 多表连接分页查询
    webstorm自动格式化.vue文件并符合Eslint
    Selenium python爬虫
    Cent OS防火墙配置端口开放
    开发Hexo主题(一)
    谷歌开发者主页回归
    个人博客网站
    linux搭建ftp
    putty之pscp上传文件
    送走了最好的兄弟 收到上交复试通知
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/9475863.html
Copyright © 2011-2022 走看看