国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:43:30
字體:
供稿:網(wǎng)友

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

二叉樹如下:

java,二叉樹,遍歷

遍歷結(jié)果如下:

java,二叉樹,遍歷

以下是實(shí)現(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é)點(diǎn)數(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é)點(diǎn)  */ 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é)點(diǎn)     System.out.print(p.data);     mark = 0;    }    else if (p.flag == 2 && stack.empty()) { // 輸出根結(jié)點(diǎn)并退出     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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永宁县| 额尔古纳市| 珲春市| 德州市| 昌吉市| 普兰店市| 宁城县| 中宁县| 凤山市| 鱼台县| 平舆县| 陇川县| 阿城市| 石狮市| 革吉县| 福贡县| 洛阳市| 北碚区| 简阳市| 焦作市| 廊坊市| 定日县| 台州市| 石嘴山市| 炉霍县| 武山县| 金寨县| 封开县| 新闻| 汤原县| 安远县| 巴彦淖尔市| 镇康县| 班玛县| 巫山县| 嵊州市| 两当县| 顺昌县| 仙居县| 祁门县| 罗定市|