1．先（根）序遍历的递归定义：

⑴ 访问根结点；

⑵ 遍历左子树；

⑶ 遍历右子树。

2．中（根）序遍历的递归算法定义：

⑴遍历左子树；

⑵访问根结点；

⑶遍历右子树。

3．后（根）序遍历得递归算法定义：

⑴遍历左子树；

⑵遍历右子树；

⑶访问根结点

java实现

``````package 二叉树;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class BSTree {

private    List<Node>nodeList=new ArrayList<Node>();
public Node CreateTree(int[] a){
for(int data:a)

int lastLeftRoot=a.length/2-1;

for(int i=lastLeftRoot; i>=0; i--)
{
Node root=nodeList.get(i);

int leftIndex=i*2+1;
int rightIndex=leftIndex+1;
if(leftIndex<a.length);
{
Node left=nodeList.get(leftIndex);
root.setLeft(left);
}
if(rightIndex<a.length)
{
Node right=nodeList.get(rightIndex);
root.setRgiht(right);
}
}
Node root=nodeList.get(0);
return root;
}

public static void printNode(Node node){
System.out.print(node.getData()+" ");
}

public static void preOrderStack(Node node){
Stack<Node> stack=new Stack<Node>();
Node p=node;
if(node!=null)
{
stack.push(p);
while(!stack.isEmpty())
{
Node top=stack.pop();
printNode(top);
if(top.getRight()!=null) stack.push(top.getRight());
if(top.getLeft()!=null) stack.push(top.getLeft());
}
}
}

public static void minOrderStack(Node node){
Stack<Node> stack=new Stack<Node>();
Node p=node;
while(p!=null ||!stack.isEmpty())
{
while(p!=null)
{
stack.push(p);
p=p.getLeft();
}
if(!stack.isEmpty())
{
p=stack.pop();
printNode(p);
p=p.getRight();
}
}
}

public static void postOrderStack(Node node){
Stack<Node> stack=new Stack<Node>();
Node p=node;
Node q=p;
while(p!=null)
{
while(p.getLeft()!=null)
{
stack.push(p);
p=p.getLeft();
}

while(p!=null&&(p.getRight()==null||p.getRight()==q))
{
printNode(p);
q=p;
if(stack.isEmpty())return;
p=stack.pop();
}
stack.push(p);
p=p.getRight();
}
}
public static void preTrav(Node node){
if(node==null)
return;
System.out.print(node.getData()+" ");
preTrav(node.getLeft());
preTrav(node.getRight());
}
public static void midTrav(Node node){
if(node==null)
return;
midTrav(node.getLeft());
System.out.print(node.getData()+" ");
midTrav(node.getRight());
}
public static void postTrav(Node node){

if(node==null)
return;
postTrav(node.getLeft());
postTrav(node.getRight());
System.out.print(node.getData()+" ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={10,6,14,4,8,12,16};//这些数据是按二叉查找树的层次遍历存放
BSTree bt=new BSTree();
Node root=bt.CreateTree(a);
preTrav(root);
System.out.println();
preOrderStack(root);
System.out.println();
midTrav(root);
System.out.println();
minOrderStack(root);
System.out.println();
postTrav(root);
System.out.println();
postOrderStack(root);
System.out.println();

}

}``````