遍历二叉树有很多种方式。大的范围分两种:横向遍历和纵向遍历(深度遍历)。纵向遍历又分为三种:前序,中序,后序。先遍历根接点是前序遍历,根接点中间遍历是中序遍历,根接点在后面遍历就是后续。如下图二叉树的前序,中序,后序遍历结果:
前序遍历结果为:
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);
else
leftNode.insert(insertValue);
}else if (insertValue > data) {
if (rightNode == null)
rightNode = new TreeNode(insertValue);
else
rightNode.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);
else
root.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();
}
}