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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例

發(fā)布時(shí)間:2024/1/23 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(shí)例講述了java實(shí)現(xiàn)二叉樹的建立、計(jì)算高度與遞歸輸出操作。分享給大家供大家參考,具體如下:

1. 建立 遞歸輸出 計(jì)算高度 前中后三種非遞歸輸出 public class Tree_Link {

private int save = 0;

private int now = 0;

Scanner sc = new Scanner(System.in);

/*

* 構(gòu)造函數(shù)

*/

Tree_Link(){

}

/*

* 鏈表建立

*/

public Tree Link_Build(Tree head){

// Tree head = new Tree();//頭節(jié)點(diǎn)

System.out.println("繼續(xù)code:1");

int flag = sc.nextInt();

if(flag != 1){

return head;

}else{

System.out.println("\n\n\n輸入 節(jié)點(diǎn)信息:");

head.SetCode(sc.nextInt());

System.out.println("\n建立 左 子樹code:1 否則:0");

flag = sc.nextInt();

if(flag == 1){

now++;

Tree LTree = new Tree();

head.SetLtree(LTree);

LTree.SetFronttree(head);//設(shè)置父母節(jié)點(diǎn)

Link_Build( head.GetLtree() );

}

System.out.println("\n當(dāng)前位置:" + head.GetCode());

System.out.println("\n建立 右 子樹code:1 否則:0");

flag = sc.nextInt();

if(flag == 1){

now++;

Tree Rtree = new Tree();

head.SetRtree(Rtree);

Rtree.SetFronttree(head);//設(shè)置父母節(jié)點(diǎn)

Link_Build( head.GetRtree() );

}

if( now > save ){

save = now;

}

now--;

}

return head;

}

/*

* 輸出樹

*/

public Tree output(Tree head){

int flag;

if(head.GetCode() == -1){

return head;

}else{

System.out.println("\n當(dāng)前位置:" + head.GetCode());

System.out.println(head.GetLtree() != null);

if(head.GetLtree() != null){

System.out.println("\n訪問 左子樹:");

output( head.GetLtree() );

}

if(head.GetRtree() != null){

System.out.println("\n訪問 右子樹:");

output( head.GetRtree() );

}

}

return head;

}

/*

* 獲得高度

*/

public int GetSave(){

return this.save;

}

/*

* 非遞歸 前序遍歷

*/

public void Front_Traverse(Tree head){

Tree star = head;//退出標(biāo)記

int choose = 1; //左

int flag = 1; //右

System.out.println( "" + head.GetCode() );//先訪問根

while(true){

if( head.GetLtree() != null && choose != 0 ){

head = head.GetLtree();

System.out.println( "" + head.GetCode() );//獲得信息

flag = 1;

}else if( head.GetRtree() != null && flag != 0 ){

head = head.GetRtree();

System.out.println( "" + head.GetCode() );

choose = 1;

}else if( flag == 0 && choose == 0 && head == star){

break;

}else{

if(head == head.GetFronttree().GetRtree()){

flag = 0;

choose = 0;

}

if(head == head.GetFronttree().GetLtree()){

choose = 0;

flag = 1;

}

head = head.GetFronttree();

System.out.println("獲得 父母" + head.GetCode());

System.out.println( "\n\n\n" );

}

}

}

/*

* 非遞歸 中序遍歷

*/

public void Center_Traverse(Tree head){

Tree star = head;//退出標(biāo)記

int choose = 1; //左

int flag = 1; //右

while(true){

if( head.GetLtree() != null && choose != 0 ){

head = head.GetLtree();

flag = 1;

}else if( head.GetRtree() != null && flag != 0 ){

if(head.GetLtree() == null){//因?yàn)樽筮厼榭斩祷?/p>

System.out.println( "" + head.GetCode());

}

head = head.GetRtree();

choose = 1;

}else if( flag == 0 && choose == 0 && head == star){

break;

}else{

int area = 0;//判斷哪邊回來(lái)

flag = 1;

choose = 1;

if(head == head.GetFronttree().GetRtree()){

area = 1;//右邊回來(lái)

flag = 0;

choose = 0;

}

if(head == head.GetFronttree().GetLtree()){

area = 2;//左邊回來(lái)

choose = 0;

flag = 1;

}

if( head.GetLtree() == null && head.GetRtree() == null ){//因?yàn)樽筮厼榭斩祷?/p>

System.out.println( "" + head.GetCode());

}

head = head.GetFronttree();

if( area == 2){//因?yàn)樽筮呍L問完返回

System.out.println( "" + head.GetCode());

}

System.out.println("獲得 父母" + head.GetCode());

System.out.println( "\n\n\n" );

}

}

}

/*

* 非遞歸 后續(xù)遍歷

*/

public void Bottom_Traverse(Tree head){

Tree star = head;//退出標(biāo)記

int choose = 1; //左

int flag = 1; //右

while(true){

if( head.GetLtree() != null && choose != 0 ){

head = head.GetLtree();

flag = 1;

}else if( head.GetRtree() != null && flag != 0 ){

head = head.GetRtree();

choose = 1;

}else if( flag == 0 && choose == 0 && head == star){

break;

}else{

int area = 0;//判斷哪邊回來(lái)

flag = 1;

choose = 1;

if(head == head.GetFronttree().GetRtree()){

area = 1;//右邊回來(lái)

flag = 0;

choose = 0;

}

if(head == head.GetFronttree().GetLtree()){

choose = 0;

flag = 1;

}

if(head.GetRtree() == null){//因?yàn)橛疫厼榭斩祷?/p>

System.out.println( "" + head.GetCode());

}

head = head.GetFronttree();

if( area == 1){

System.out.println( "" + head.GetCode());

}

System.out.println("獲得 父母" + head.GetCode());

System.out.println( "\n\n\n" );

}

}

}

}

2. Tree 類實(shí)現(xiàn): public class Tree {

private int code = -1;

private Tree Fonttree;

private Tree Ltree;

private Tree Rtree;

Tree(){

this.code = -1;

this.Ltree = null;

this.Rtree = null;

}

/*

* 樹內(nèi)容查看方法:

*/

public void SetCode(int code){//設(shè)置編號(hào)

this.code = code;

}

public int GetCode(){ //獲取編號(hào)

return this.code;

}

/*

* 設(shè)置父母指針:

*/

public void SetFronttree(Tree Front){

this.Fonttree = Front;

}

public Tree GetFronttree(){

System.out.println("獲得 父母");

return this.Fonttree;

}

/*

* 設(shè)置左子女:

*/

public void SetLtree(Tree Ltree){

this.Ltree = Ltree;

}

public Tree GetLtree(){

System.out.println("獲得左子樹");

return this.Ltree;

}

/*

* 設(shè)置右子女:

*/

public void SetRtree(Tree Rtree){

this.Rtree = Rtree;

}

public Tree GetRtree(){

System.out.println("獲得右子樹");

return this.Rtree;

}

}

3. 主函數(shù)測(cè)試: public class MainActivity {

Scanner sc = new Scanner(System.in);

public static void main(String[] args) {

Tree head = new Tree();

Tree_Link link_1st = new Tree_Link();

head = link_1st.Link_Build(head);

System.out.println("Build succeed !");

System.out.println("\n二叉樹高度-->" + link_1st.GetSave());

link_1st.output(head);

System.out.println("Output Over !");

System.out.println("\n\n\n前序訪問根:");

link_1st.Front_Traverse(head);

System.out.println("\n\n\n中序訪問根:");

link_1st.Center_Traverse(head);

System.out.println("\n\n\n后序訪問根:");

link_1st.Bottom_Traverse(head);

System.out.println("\n\n\n\nText over !\n\n\n");

}

}

更多關(guān)于Java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

總結(jié)

以上是生活随笔為你收集整理的java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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