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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序员面试中可能会问到二叉树的高度,这是一个常见的问题。二叉树是一种数据结构,它由节点组成,每个节点最多有两个子节点。二叉树的高度表示从根节点到最深节点的距离。以下是Java实现二叉树高度的代码示例: ``` public class BinaryTreeHeight { //定义二叉树节点 class Node { int data; Node left; Node right; public Node(int data) { this.data = data; left = null; right = null; } } //计算二叉树高度的方法 public int getHeight(Node root) { if (root == null) { return 0; } else { int leftHeight = getHeight(root.left); int rightHeight = getHeight(root.right); return Math.max(leftHeight, rightHeight) + 1; } } //测试方法 public static void main(String[] args) { BinaryTreeHeight tree = new BinaryTreeHeight(); Node root = tree.new Node(1); root.left = tree.new Node(2); root.right = tree.new Node(3); root.left.left = tree.new Node(4); root.left.right = tree.new Node(5); System.out.println("二叉树的高度是:" + tree.getHeight(root)); } } ``` 在这个示例中,我们定义了一个Node类来表示二叉树的节点,它包含节点值以及左右子节点。然后,我们定义了一个getHeight()方法来计算二叉树的高度。在计算高度时,我们使用递归来遍历左右子树,并计算它们的高度。最后,我们返回左右子树中较大的高度加1作为二叉树的高度。 在面试中,你可能会被问到如何在二叉树中查找一个节点、如何插入和删除一个节点等问题。因此,在准备Java程序员面试时,建议你熟悉二叉树的基本操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值