91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java實現二叉樹遍歷的三種方式

發布時間:2020-09-05 04:21:08 來源:腳本之家 閱讀:175 作者:zhangbinu 欄目:編程語言

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

二叉樹如下:

java實現二叉樹遍歷的三種方式

遍歷結果如下:

java實現二叉樹遍歷的三種方式

以下是實現代碼:

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());
 }
}

/**
 * 節點數據結構
 * 
 * @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 {

 /**
  * 創建一棵二叉樹
  * 
  * @author bin.zhang
  * @return 根節點
  */
 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);
  }
 }
}

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

始兴县| 南开区| 漳浦县| 玛曲县| 德化县| 晋中市| 丰台区| 周至县| 马山县| 微博| 巫山县| 平舆县| 逊克县| 青河县| 临湘市| 尉犁县| 濮阳市| 苗栗市| 五大连池市| 齐河县| 双流县| 聂荣县| 繁峙县| 遂昌县| 宁远县| 新蔡县| 璧山县| 天等县| 会同县| 遂川县| 曲阜市| 射洪县| 竹溪县| 新民市| 皋兰县| 甘肃省| 望城县| 卢氏县| 同仁县| 太仓市| 沧州市|