遍历二叉树

来源:互联网 发布:台湾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();}}



原创粉丝点击