最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)二叉樹遍歷的三種方式

 更新時間:2019年01月05日 11:07:38   作者:zhangbinu  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)二叉樹遍歷的三種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現(xiàn)二叉樹遍歷的具體代碼,供大家參考,具體內(nèi)容如下

二叉樹如下:

遍歷結(jié)果如下:

以下是實現(xiàn)代碼:

package binTree;

import java.util.Stack;

/**
 * @author bin.zhang
 * @version 2017年8月29日 上午10:22:01
 */
public class BinTreeTraversal {
 public static void main(String[] args) {
  System.out.print("前序:");
  Traversal.preOrder();
  Traversal.preOrderRecursion(Traversal.createBinTree());
  System.out.print("中序:");
  Traversal.inOrder();
  Traversal.inOrderRecursion(Traversal.createBinTree());
  System.out.print("后序:");
  Traversal.postOrder();
  Traversal.postOrderRecursion(Traversal.createBinTree());
 }
}

/**
 * 節(jié)點數(shù)據(jù)結(jié)構(gòu)
 * 
 * @author bin.zhang
 * @version 2017年8月30日 上午11:49:38
 */
class BinTreeNode {

 BinTreeNode() {
 }

 BinTreeNode(char data, int flag, BinTreeNode lchild, BinTreeNode rchild) {
  this.data = data;
  this.flag = flag;
  this.lchild = lchild;
  this.rchild = rchild;
 }

 char data;
 int flag;
 BinTreeNode lchild, rchild;

}

class Traversal {

 /**
  * 創(chuàng)建一棵二叉樹
  * 
  * @author bin.zhang
  * @return 根節(jié)點
  */
 public static BinTreeNode createBinTree() {
  BinTreeNode R3 = new BinTreeNode('F', 0, null, null);
  BinTreeNode L2 = new BinTreeNode('D', 0, null, null);
  BinTreeNode R2 = new BinTreeNode('E', 0, null, R3);
  BinTreeNode L1 = new BinTreeNode('B', 0, L2, R2);
  BinTreeNode R1 = new BinTreeNode('C', 0, null, null);
  BinTreeNode T = new BinTreeNode('A', 0, L1, R1);
  return T;
 }

 // 前序
 public static void preOrder() {

  BinTreeNode p = createBinTree();

  Stack<BinTreeNode> stack = new Stack<BinTreeNode>();

  while (p != null || !stack.empty()) {
   if (p != null) {
    System.out.print(p.data);
    stack.push(p);
    p = p.lchild;
   }
   else {
    p = stack.pop();
    p = p.rchild;
   }
  }
  System.out.println();

 }

 // 前序遞歸
 public static void preOrderRecursion(BinTreeNode top) {
  if (top != null) {
   System.out.println(top.data);
   preOrderRecursion(top.lchild);
   preOrderRecursion(top.rchild);
  }
 }

 // 中序
 public static void inOrder() {

  BinTreeNode p = createBinTree();

  Stack<BinTreeNode> stack = new Stack<BinTreeNode>();

  while (p != null || !stack.empty()) {
   if (p != null) {
    stack.push(p);
    p = p.lchild;
   }
   else {
    p = stack.pop();
    System.out.print(p.data);
    p = p.rchild;
   }
  }
  System.out.println();
 }

 // 中序遞歸
 public static void inOrderRecursion(BinTreeNode top) {
  if (top != null) {
   inOrderRecursion(top.lchild);
   System.out.println(top.data);
   inOrderRecursion(top.rchild);
  }
 }

 // 后序
 public static void postOrder() {

  BinTreeNode p = createBinTree();

  Stack<BinTreeNode> stack = new Stack<BinTreeNode>(); // 初始化棧

  int mark = 1; // 轉(zhuǎn)向標(biāo)志
  while (p != null || !stack.empty()) { // 遍歷
   if (p != null && mark != 0) {
    stack.push(p);
    p = p.lchild;
   }// 轉(zhuǎn)向左子樹
   else {
    p = stack.pop();
    p.flag++; // 退棧
    if (p.flag == 1) {
     stack.push(p);
     p = p.rchild;
     mark = 1;
    } // 轉(zhuǎn)向右子樹
    else if (p.flag == 2 && !stack.empty()) { // 輸出結(jié)點
     System.out.print(p.data);
     mark = 0;
    }
    else if (p.flag == 2 && stack.empty()) { // 輸出根結(jié)點并退出
     System.out.print(p.data);
     break;
    }
   } // if-else
  } // while
  System.out.println();
 }

 // 后序遞歸
 public static void postOrderRecursion(BinTreeNode top) {
  if (top != null) {
   postOrderRecursion(top.lchild);
   postOrderRecursion(top.rchild);
   System.out.println(top.data);
  }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入了解java8的foreach循環(huán)

    深入了解java8的foreach循環(huán)

    雖然java8出來很久了,但是之前用的一直也不多,最近正好學(xué)習(xí)了java8。下面給大家分享java8中的foreach循環(huán),感興趣的朋友一起看看吧
    2017-05-05
  • SpringBoot整合MyBatis和MyBatis-Plus請求后不打印sql日志的問題解決

    SpringBoot整合MyBatis和MyBatis-Plus請求后不打印sql日志的問題解決

    本文主要介紹了SpringBoot整合MyBatis和MyBatis-Plus請求后不打印sql日志的問題解決文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Spring Data JPA開啟批量更新時樂觀鎖失效問題的解決方法

    Spring Data JPA開啟批量更新時樂觀鎖失效問題的解決方法

    樂觀鎖的基本思想是,認(rèn)為在大多數(shù)情況下,數(shù)據(jù)訪問不會導(dǎo)致沖突,因此,樂觀鎖允許多個事務(wù)同時讀取和修改相同的數(shù)據(jù),而不進(jìn)行顯式的鎖定,本文給大家介紹了Spring Data JPA開啟批量更新時樂觀鎖失效問題的解決方法,需要的朋友可以參考下
    2024-07-07
  • java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實例

    java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實例

    這篇文章主要介紹了java json字符串轉(zhuǎn)JSONObject和JSONArray以及取值的實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令

    Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令

    這篇文章主要介紹了Java中通過jsch來連接遠(yuǎn)程服務(wù)器執(zhí)行l(wèi)inux命令的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • MyBatis主鍵生成策略中useGeneratedKeys和<selectKey>的區(qū)別

    MyBatis主鍵生成策略中useGeneratedKeys和<selectKey>的區(qū)別

    本文主要介紹了MyBatis主鍵生成策略中useGeneratedKeys和<selectKey>的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Jpa使用Page和Pageable分頁遇到的問題及解決

    Jpa使用Page和Pageable分頁遇到的問題及解決

    這篇文章主要介紹了Jpa使用Page和Pageable分頁遇到的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring jpa和mybatis整合遇到的問題解析

    Spring jpa和mybatis整合遇到的問題解析

    有朋友說jpa相比mybatis太難用,多表聯(lián)合的查詢寫起來也比較費勁,所以便加入了mybatis的支持,在配置jpa時遇到各種問題,需要修改相關(guān)配置文件,下面小編給大家分享下修改配置文件的思路,感興趣的朋友參考下
    2016-10-10
  • Java GUI插入圖片不顯示問題解決方法

    Java GUI插入圖片不顯示問題解決方法

    大家好,本篇文章主要講的是Java GUI插入圖片不顯示問題解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java中有什么工具可以進(jìn)行代碼反編譯詳解

    Java中有什么工具可以進(jìn)行代碼反編譯詳解

    這篇文章主要介紹了Java中有什么工具可以進(jìn)行代碼反編譯的相關(guān)資,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、BytecodeViewer、Krakatau和JAD,每種工具都有其特點和適用場景,需要的朋友可以參考下
    2025-03-03

最新評論

鄄城县| 兴业县| 屯留县| 甘泉县| 广东省| 安化县| 马鞍山市| 庄浪县| 玛多县| 房山区| 郸城县| 满洲里市| 包头市| 通山县| 广南县| 海阳市| 广元市| 大化| 延安市| 拉萨市| 拜城县| 麻阳| 宾川县| 南投市| 南漳县| 甘洛县| 安徽省| 万州区| 阜宁县| 云龙县| 罗江县| 宝兴县| 保德县| 和平县| 深水埗区| 高阳县| 马公市| 西丰县| 河北省| 巴林左旗| 盐津县|