欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

二叉樹如下:

遍歷結果如下:

以下是實現(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ù)結構
 * 
 * @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; // 轉向標志
  while (p != null || !stack.empty()) { // 遍歷
   if (p != null && mark != 0) {
    stack.push(p);
    p = p.lchild;
   }// 轉向左子樹
   else {
    p = stack.pop();
    p.flag++; // 退棧
    if (p.flag == 1) {
     stack.push(p);
     p = p.rchild;
     mark = 1;
    } // 轉向右子樹
    else if (p.flag == 2 && !stack.empty()) { // 輸出結點
     System.out.print(p.data);
     mark = 0;
    }
    else if (p.flag == 2 && stack.empty()) { // 輸出根結點并退出
     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);
  }
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • J2ME編程中的幾個重要概念介紹

    J2ME編程中的幾個重要概念介紹

    本文介紹的是J2ME編程應用平臺中的幾個重要概念,希望對你有幫助,一起來看。
    2015-09-09
  • Automapper實現(xiàn)自動映射的實例代碼

    Automapper實現(xiàn)自動映射的實例代碼

    這篇文章主要介紹了Automapper實現(xiàn)自動映射的實例代碼,需要的朋友可以參考下
    2017-09-09
  • 關于dubbo的RPC和RESTful性能及對比

    關于dubbo的RPC和RESTful性能及對比

    這篇文章主要介紹了關于dubbo的RPC和RESTful性能及對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java實現(xiàn)開箱即用的redis分布式鎖

    Java實現(xiàn)開箱即用的redis分布式鎖

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)開箱即用的基于redis的分布式鎖,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以收藏一下
    2022-12-12
  • java集合collection接口與子接口及實現(xiàn)類

    java集合collection接口與子接口及實現(xiàn)類

    這篇文章主要介紹了java集合collection接口與子接口及實現(xiàn)類,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • 一文看懂springboot實現(xiàn)短信服務功能

    一文看懂springboot實現(xiàn)短信服務功能

    項目中的短信服務基本上上都會用到,簡單的注冊驗證碼,消息通知等等都會用到。這篇文章主要介紹了springboot 實現(xiàn)短信服務功能,需要的朋友可以參考下
    2019-10-10
  • 如何優(yōu)雅的拋出Spring Boot注解的異常詳解

    如何優(yōu)雅的拋出Spring Boot注解的異常詳解

    這篇文章主要給大家介紹了關于如何優(yōu)雅的拋出Spring Boot注解的異常的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 詳解SpringBoot下文件上傳與下載的實現(xiàn)

    詳解SpringBoot下文件上傳與下載的實現(xiàn)

    這篇文章主要介紹了SpringBoot下文件上傳與下載的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 深入理解Java中的HashMap

    深入理解Java中的HashMap

    HashMap是Java程序員使用頻率最高的用于映射(鍵值對)處理的數(shù)據(jù)類型。隨著JDK(Java Developmet Kit)版本的更新,JDK1.8對HashMap底層的實現(xiàn)進行了優(yōu)化,例如引入紅黑樹的數(shù)據(jù)結構和擴容的優(yōu)化等。本文將深入探討HashMap的結構實現(xiàn)和功能原理
    2021-06-06
  • 解析Java繼承中方法的覆蓋和重載

    解析Java繼承中方法的覆蓋和重載

    這篇文章主要介紹了Java繼承中方法的覆蓋和重載的詳細概念及用法,非常的實用,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-05-05

最新評論