日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java二叉树生成器_JAVA实现二叉树生成

發(fā)布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java二叉树生成器_JAVA实现二叉树生成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定某二叉樹三序遍歷中的兩個,我們即可以通過生成該二叉樹,并遍歷的方法,求出剩下的一序,具體代碼如下package Tree;

import java.io.BufferedInputStream;

import java.util.*;

public class BT {

class Node{

Node l;//左兒子

Node r;//右兒子

char c;//結(jié)點字符

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

總結(jié)

以上是生活随笔為你收集整理的java二叉树生成器_JAVA实现二叉树生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。