二叉搜索树转换为链表

 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 }

 

转载于:https://www.cnblogs.com/fankongkong/p/6548858.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值