Java已知二叉树的中序后序求先序序列

简介:

已经中序,后序,求先序。

先序的顺序为:先根节点,后左子树,后右子树。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package  whut.tree;
//利用java api来进行遍历
////已知二叉树后序和中序,求先序
public  class  MiddleAfterTree {
     //全局变量存放后序序列
     //先写根,后写左子树,最后写右子树
     public  static  String res =  "" ;
     //两个字符串是否包含了相同的字符
     public  static  boolean  StringEquals(String a1, String a2) {
         boolean  state =  true ;
         if  (a1.length() != a2.length()) {
             state =  false ;
         }
         if  (a1.length() == a2.length()) {
             for  ( int  i =  0 ; i < a1.length(); i++) {
                 if  (a2.indexOf(a1.charAt(i)) == - 1 )
                     state =  false ;
             }
         }
         return  state;
     }
     //进行遍历输出
     //参数依此为中序序列,后序序列
     public  static  void  cal_tree(String smid, String slast) {
         boolean  state = StringEquals(smid, slast);
         if  (state ==  false )
             return ;
         if  (smid.length() ==  0 )
             return ;
         //每次添加都是添加中序的字符,当中序字符串长度为1的时候,就返回
         if  (smid.length() ==  1 ) {
             res += smid;
             return ;
         }
         //后序序列中最后一个就是根
         char  root = slast.charAt(slast.length()- 1 );
         //获取字符在中序序列总的位置
         //mid代表的是索引
         int  mid = smid.indexOf(root);
         //中序序列的左子树
         String c=smid.substring( 0 , mid);
         //中序序列的右子树
         String d = smid.substring(mid+ 1 );
         //写入根
         res += String.valueOf(root);
         //中序左子树,后序左子树
         cal_tree(c,slast.substring( 0 , c.length()));
         //中序右子树,后序右子树,注意这里后序的右子树要最大为slast.length()-1
         cal_tree(d,slast.substring(c.length(),slast.length()- 1 ));
         return ;
     }
     public  static  void  main(String[] agrs) {
         //cal_tree("ADEFGHMZ","AEFDHZMG");=GDAFEMHZ
         //cal_tree("CDBEAGF","DCEBGFA");=ABCDEFG
         String s1 =  "ADEFGHMZ" ;
         String s2 =  "AEFDHZMG" ;
         cal_tree(s1, s2);
         if  (res.length() != s1.length())
         {
             System.out.println( "wrong tree list!" );
         }
         else  {
             System.out.println(res);
         }
     }
}




本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1305991
相关文章
|
7月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
55 4
|
8月前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
46 4
|
8月前
|
存储 Java
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
60 1
|
3月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
38 1
|
3月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
32 1
|
2月前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
26 0
|
8月前
|
存储 Java
Java实现二叉树
Java实现二叉树
83 0
|
6月前
|
Arthas 监控 算法
JVM成神路终章:深入死磕Java虚拟机序列总纲
JVM成神路终章:深入死磕Java虚拟机序列总纲
159 1
|
5月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
90 0
|
7月前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
63 5