JAVA实现二叉树生成

作者: 糖宝_ | 来源:发表于2018-05-10 07:59 被阅读0次

给定某二叉树三序遍历中的两个,我们即可以通过生成该二叉树,并遍历的方法,求出剩下的一序,具体代码如下

[java] view plain copy

package Tree;  

import java.io.BufferedInputStream;  

import java.util.*;  

public class BT {  

class Node{  

Node l;//左儿子  

Node r;//右儿子  

char c;//结点字符  

public Node(char c) {  

this.c = c;  

this.l = null;  

this.r = null;  

        }  

    }  

    Node root;  

char[] str1,str2;  

public BT() {  

root =null;  

    }  

public void postOrder(Node n) {  

if(n.l!=null) {  

            postOrder(n.l);  

        }  

if(n.r!=null) {  

            postOrder(n.r);  

        }  

        System.out.print(n.c);  

    }  

public void firstOrder() {  

this.firstOrder(this.root);  

    }  

public void firstOrder(Node n) {  

        System.out.print(n.c);  

if(n.l!=null) {  

            firstOrder(n.l);  

        }  

if(n.r!=null) {  

            firstOrder(n.r);  

        }  

    }  

public void postOrder() {  

this.postOrder(this.root);  

    }  

public Node build(int s1,int e1,int s2,int e2) {  

char c = str1[s1];  

Node Root =new Node(c);  

int index = 0;  

for(int i = s2;i<=e2;i++) {  

if(str2[i]==c) {  

                index = i;  

break;  

            }  

        }  

if(index!=s2) {//如果左子树不为空  

Root.l = build(s1+1,s1+index-s2,s2,index-1);  

        }  

if(index!=e2) {//如果右子树不为空  

Root.r = build(s1+index-s2+1,e1,index+1,e2);  

        }  

return Root;  

    }  

public Node build1(int s1,int e1,int s2,int e2) {//中后序还原树  

char c = str2[e2];  

Node Root =new Node(c);  

int index = 0;  

for(int i = s1;i<=e1;i++) {  

if(str1[i]==c) {  

                index = i;  

break;  

            }  

        }  

if(index!=s1) {  

Root.l = build1(s1,index-1,s2,s2+index-s1-1);  

        }  

if(index!=e1) {  

Root.r = build1(index+1,e1,s2+index-s1+1,e2-1);  

        }  

return Root;  

    }  

public static void main(String[] args) {  

String s1,s2 =null;  

Scanner sc =new Scanner(new BufferedInputStream(System.in));  

BT bt =new BT();  

while(sc.hasNext()) {  

            s1 = sc.next();  

            s2 = sc.next();  

bt.str1 =new char[s1.length()];  

bt.str2 =new char[s1.length()];  

            bt.str1 = s1.toCharArray();  

            bt.str2 = s2.toCharArray();  

bt.root = bt.build1(0, s1.length()-1, 0, s1.length()-1);  

            bt.firstOrder();  

        }  

    }  

}  

其中build是已知前中序,生成二叉树;build1是已知中后序,生成二叉树

相关文章

  • 二叉树-生成-遍历-反转

    1 关于二叉树的生成--遍历--反转-等操作的JAVA版实现 二叉树:是一种有两个子节点的树形结构,分为根节...

  • 力扣算法 - 翻转二叉树

    翻转二叉树 翻转一棵二叉树。 示例: 输入: 输出: 思路: Java实现 Swift实现

  • JAVA实现二叉树生成

    给定某二叉树三序遍历中的两个,我们即可以通过生成该二叉树,并遍历的方法,求出剩下的一序,具体代码如下 [java]...

  • 算法与数据结构系列之[二叉树-下]

    上篇贴出了二叉树的C语言代码实现,这篇贴出Java代码实现。

  • 二叉树BinaryTree

    Java 实现二叉树的构造以及遍历过程 二叉树遍历(先序、中序、后序)

  • 树 - 实现二叉排序树(Java)

    链表实现二叉树的类型声明(Java): 二叉树的构建 调用(Kotlin写法): 二叉树构建过程分解:

  • Java二叉树的遍历

    Java二叉树的遍历 利用递归和非递归实现二叉树的先序,中序,后序遍历以及使用队列实现二叉树的层次遍历

  • 二叉树遍历

    了解:js可通过数组内置方法push与shift实现队列;通过push与pop实现栈; 构造二叉树 生成一个二叉树...

  • 二叉树实现排序列表

    使用Java实现的二叉树排序列表 二叉树实现类 实体类 测试类 输出结果 [Person{name='李四', a...

  • Java生成图片验证码

    Java生成图片验证码 手动实现图片验证码生成 调用演示

网友评论

    本文标题:JAVA实现二叉树生成

    本文链接:https://www.haomeiwen.com/subject/pjwarftx.html