java二叉树代码_JAVA语言实现二叉树生成的代码教程

使用JAVA实现二叉树构建及遍历
本文介绍了一种使用JAVA语言构建二叉树的方法,包括根据前序和中序遍历结果构建,以及根据中序和后序遍历结果构建。代码详细展示了如何通过递归进行树的构建和遍历,对于理解和实现二叉树操作具有指导意义。

本文主要向大家介绍了JAVA语言实现二叉树生成的代码教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

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

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是已知中后序,生成二叉树.

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值