国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 苍梧县| 丰原市| 南漳县| 崇信县| 眉山市| 南皮县| 长岛县| 克山县| 崇州市| 南阳市| 泰和县| 西吉县| 平南县| 梁山县| 鄂尔多斯市| 公安县| 金秀| 秦皇岛市| 曲靖市| 二连浩特市| 清水县| 崇左市| 天全县| 那坡县| 铁岭市| 柯坪县| 化州市| 牙克石市| 修武县| 黔西县| 兴和县| 密山市| 烟台市| 蓝田县| 历史| 长顺县| 平江县| 丰原市| 修水县| 肃宁县| 东山县|