用Java实现二叉树的三种遍历方式
来源:互联网 发布:网络信息安全要学什么 编辑:程序博客网 时间:2024/05/23 15:36
二叉树如下:
遍历结果如下:
以下是实现代码:
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); } }}
阅读全文
1 0
- 用Java实现二叉树的三种遍历方式
- 二叉树的三种遍历方式java实现
- 二叉树的三种遍历方式java实现
- 用C++实现二叉树的三种遍历方式
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- java实现二叉树的三种遍历方式,并把二叉树转为双向链表,输出二叉树
- 二叉树的java构建和三种遍历方式
- Java实现完全二叉树的构建以及三种遍历方式
- 二叉树的三种遍历方式及应用(java实现)
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- (学习java)二叉树的链式实现以及三种遍历方式
- java数据结构之实现 二叉树 以及二叉树的遍历方式(三)
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- jdbc链接到数据库的示例代码
- 安装ceres出现错误,与eigen3.3发生冲突
- 一、linux系统基础命令
- C++术语辨析——左值和右值
- 嵌入式系统硬件组成-3.6
- 用Java实现二叉树的三种遍历方式
- Android GPS室内定位问题的解决方法(location为null)
- Erlang学习笔记(七)二进制型与位语法
- NLTK03 《Python自然语言处理》code02 获得文本语料和词汇资源
- UGUI 学习笔记 1 图集
- Java序列化的几种特殊情景
- 注册逻辑二 发送激活链接
- Ajax的一点用法
- okhttp网络框架源码分析