遍历二叉树
来源:互联网 发布:台湾erp软件 编辑:程序博客网 时间:2024/06/07 04:11
遍历二叉树有很多种方式。大的范围分两种:横向遍历和纵向遍历(深度遍历)。纵向遍历又分为三种:前序,中序,后序。先遍历根接点是前序遍历,根接点中间遍历是中序遍历,根接点在后面遍历就是后续。如下图二叉树的前序,中序,后序遍历结果:
前序遍历结果为:
57,42,35,23,9,24,48,45,43,51,70,62,61,68,66,69,
72,78,77,91
中序遍历结果为:
9,23,24,35,42,43,45,48,51,57,61,62,66,68,69,70,
72,77,78,91
后序遍历结果为:
9,24,23,35,43,45,51,48,42,61,66,69,68,62,77,91,
78,72,70,57
也就是说该二叉树是按中序有序遍历的二叉树。
package com.itjob;public class TreeNode {TreeNode leftNode;int data;TreeNode rightNode;public TreeNode(int nodeData) {data = nodeData; }public synchronized void insert(int insertValue) {if (insertValue < data) {if (leftNode == null)leftNode = new TreeNode(insertValue);elseleftNode.insert(insertValue);}else if (insertValue > data) {if (rightNode == null)rightNode = new TreeNode(insertValue);elserightNode.insert(insertValue);}} } package com.itjob;public class MyTree {private TreeNode root;public MyTree() {root = null;}// 插入节点到树public synchronized void insertNode(int insertValue) {if (root == null)root = new TreeNode(insertValue); elseroot.insert(insertValue);}// 开始先序遍历public synchronized void preorderTraversal() {preorderHelper(root);}// 执行先序遍历的方法private void preorderHelper(TreeNode node) {if (node == null)return;System.out.print(node.data + " ");preorderHelper(node.leftNode);preorderHelper(node.rightNode);}// 开始中序遍历public synchronized void inorderTraversal() {inorderHelper(root);}// 执行中序遍历的方法private void inorderHelper(TreeNode node) {if (node == null)return;inorderHelper(node.leftNode); System.out.print(node.data + " ");inorderHelper(node.rightNode);}// 开始后序遍历public synchronized void postorderTraversal() {postorderHelper(root);}// 执行后序遍历的方法private void postorderHelper(TreeNode node) {if (node == null)return;postorderHelper(node.leftNode);postorderHelper(node.rightNode); System.out.print(node.data + " "); }}package com.itjob;public class TreeTest {public static void main(String args[]) {MyTree tree = new MyTree();int value;System.out.println("Inserting the following values: ");// 插入10个0-99的随机数for (int i = 1; i <= 10; i++) {value = (int) (Math.random() * 100);System.out.print(value + " ");tree.insertNode(value);}System.out.println("先序遍历");tree.preorderTraversal();System.out.println("中序遍历");tree.inorderTraversal();System.out.println("后序遍历");tree.postorderTraversal();System.out.println();}}
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- Properties demo
- MySQL update 语句的正确用法
- Button按钮自定义样式
- CSGL(OpenGL C#)下的文字输出
- 向MySQL增加新用户账户
- 遍历二叉树
- 系统引导管理器GRUB,为初学者指南
- tar 打包和压缩
- java String以及正则(2)
- tomcat java_home 问题
- Android的Linux内核的电源管理:Early Suspend
- Android JNI 使用的数据结构JNINativeMethod详解
- linux 基础学习之五:shell脚本学习(2)——基本语法
- C宏定义【转】