• 二叉搜索树转换为链表


     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 }
  • 相关阅读:
    Linux中搭建Maven私服
    NIO类库
    JAVA网络通信IO-NIO-AIO-Netty
    栈和队列
    JAVA四类八种基本数据类型
    JAVA基础—线程池
    vue 数组push元素 视图没更新
    小程序♥云开发
    vue2.0 transition 手风琴
    element-ui 表格翻页多选后仍然记忆所选项,数据回显
  • 原文地址:https://www.cnblogs.com/fankongkong/p/6548858.html
Copyright © 2020-2023  润新知