zoukankan      html  css  js  c++  java
  • 剑指:二叉搜索树与双向链表

    题目描述

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

    例图:

    解法:

    由于是二叉搜索树,因此中序遍历的结果就是排序的。

    中序遍历利用栈来实现。遍历时,前一个结点的 right 指向后一个结点,后一个结点的 left 指向前一个结点。(10连接左子树的最大值,同时连接右子树的最小值。)

    public TreeNode convert(TreeNode root){
           if(root==null){
               return null;
           }
           Stack<TreeNode> stack = new Stack<>();
           TreeNode cur = root;
           TreeNode res = null;
           TreeNode pre = null;
           while(cur != null || !stack.isEmpty()){
               if(cur != null){
                   stack.push(cur);
                   cur = cur.left;
               }else{
                   cur = stack.pop();
                   if(pre == null){
                       pre = cur;
                       res = pre;
                   }else{
                       pre.right = cur;
                       cur.left = pre;
                       pre = cur;
                   }
                   cur = cur.right;
               }
          }
         return res;
    }

    可转换成递归的方式

  • 相关阅读:
    10.15
    10.14
    11.12
    10.10
    10.9
    如何向jar包里写文件
    mycat的配置文件
    启动spring boot打成的zip包脚本
    通俗易懂的rpc原理
    当Mockito遭遇使用注解注入的变量
  • 原文地址:https://www.cnblogs.com/lisen10/p/11218710.html
Copyright © 2011-2022 走看看