zoukankan      html  css  js  c++  java
  • 二叉搜索树转换为链表

     1 package com.algorithm;
     2 
     3 public class BstALL {
     4 //输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
     5 //要求不能创建任何新的结点,只能调整树中结点指针的指向
     6      public TreeNode Convert(TreeNode pRootOfTree) {
     7             if(pRootOfTree == null)
     8                 return null;
     9             if(pRootOfTree.left == null && pRootOfTree.right == null)
    10                 return pRootOfTree;
    11             //1、将左子树 构造成双链表,并返回链表头结点
    12             TreeNode left = Convert(pRootOfTree.left);
    13             TreeNode p = left;
    14             //2、定位至左子树双链表最后一个节点
    15             while(p!=null && p.right != null){
    16                 p = p.right;
    17             }
    18             //3、如果左子树链表不为空,将当前root追加到左子树链表
    19             if(left != null){
    20                 p.right = pRootOfTree;
    21                 pRootOfTree.left = p;
    22             }
    23             //4、将右子树构成双链表,并返回链表头结点
    24             TreeNode right = Convert(pRootOfTree.right);
    25             //如果右子树链表不为空的话,将该链表追加到root节点之后
    26             if(right != null){
    27                 right.left = pRootOfTree;
    28                 pRootOfTree.right = right;
    29             }
    30             return left!=null?left:pRootOfTree;
    31       }
    32      public static void main(String[] args) {
    33          TreeNode root = new TreeNode(10);
    34          TreeNode rootleft = new TreeNode(6);
    35          TreeNode rootright = new TreeNode(14);
    36          root.left = rootleft;
    37          root.right = rootright;
    38          
    39          TreeNode root2 = new TreeNode(4);
    40          TreeNode root3 = new TreeNode(8);
    41          
    42          rootleft.left = root2;
    43          rootleft.right = root3;
    44          
    45          TreeNode root4 = new TreeNode(12);
    46          TreeNode root5 = new TreeNode(16);
    47          
    48          rootright.left = root4;
    49          rootright.right = root5;
    50          
    51          new BstALL().Convert(root);
    52          
    53     }
    54 }
  • 相关阅读:
    【Leetcode】328.奇偶链表
    【Leetcode】127.单词接龙(BFS与DFS区别)
    从ReentrantLock加锁解锁角度分析AQS
    一文解决LeetCode岛屿问题
    IIS 解决首次加载慢的问题
    IEqualityComparer<TSource> 比较规则
    C# 闭包问题 (待完善)
    两个MD5值一样的 128 byte sequences
    Windows解决忘记用户密码
    部署在阿里云上的项目收到了阿里云发送的shiro漏洞
  • 原文地址:https://www.cnblogs.com/fankongkong/p/6548858.html
Copyright © 2011-2022 走看看