目录
—节点类的设计
—前序遍历
—中序遍历
—后序遍历
—三种遍历的总结
===================奇妙的分割线++++++++++++++++++++++++++++++
节点类的设计
private class Node{
public E e;
public Node left,right;
public Node(E e) {
this.e = e;
left = null;
right = null;
}
}
前序遍历
前序遍历是二分搜索树最自然的遍历
//二分搜索树的前序遍历
public void preOrder() {
preOrder(root);
}
//前序遍历以node为根的二分搜索树,递归算法
private void preOrder(Node node) {
if(node == null) //递归结束条件
return;
System.out.println(node.e); //对节点进行操作
preOrder(node.left);
preOrder(node.right);
}
模拟输入测试数据{5,3,6,8,4,2,1,7}得到的结果:
2
1
4
6
8
7
先对节点进行操作,再进行左右孩子的遍历,是前序遍历
中序遍历
中序遍历的结果可以实现对二分搜索树的自然排序。
//二分搜索树的中序遍历
public void inOrder() {
inOrder(root);
}
//中序遍历以node为根的二分搜索树,递归算法
private void inOrder(Node node) {
if(node == null) //递归终止条件
return;
inOrder(node.left);
System.out.println(node.e); //对节点进行操作
inOrder(node.right);
}
模拟输入测试数据{5,3,6,8,4,2,1,7}得到的结果:
1
2
3
4
5
6
7
8
在对左右孩子的遍历之间对节点进行操作,是中序遍历
后序遍历
后序遍历特点在于应用,最后进行说明
//二分搜索树的后序遍历
public void postOrder() {
postOrder(root);
}
//后序遍历以node为根的二分搜索树,递归算法
private void postOrder(Node node) {
if(node ==null) //递归终止条件
return;
postOrder(node.left);
postOrder(node.right);
System.out.println(node.e); //对节点进行操作
}
模拟输入测试数据{5,3,6,8,4,2,1,7}得到的结果:
1
2
4
3
7
8
6
5
先对左右孩子遍历,最后对节点进行操作是后序遍历
三种遍历的特点和应用
在对一个二分搜索树进行遍历的时候,每一个节点都会被访问三次
第一次访问就操作————前序遍历
第二次访问才操作————中序遍历
第三次访问才操作————后序遍历
前序遍历最自然,中序遍历可以用于排序,而后序遍历则可以用于对树进行内存释放。Java中有垃圾自动回收机制,所以后序遍历在Java中不会过多的应用。