二叉树的递归遍历
/** 递归实现前序遍历 */
public void preorder(Node p) {
if (p != null) {
System.out.println(p.data);
preorder(p.getLeft());
preorder(p.getRight());
}
}
/** 递归实现中序遍历 */
public void inorder(Node p) {
if (p != null) {
inorder(p.getLeft());
System.out.println(p.data);
inorder(p.getRight());
}
}
/** 递归实现后序遍历 */
public void postorder(Node p) {
if (p != null) {
postorder(p.getLeft());
postorder(p.getRight());
System.out.println(p.data);
}
}
二叉树的非递归遍历:先序遍历和中序遍历
/*
* 树的非递归先序遍历
*/
public void PreOrderTraverse(Node head){
Stack<Node> stack=new Stack<Node>();
Node p=head;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stak.push(p);
System.ou.println(p.data);
p=p.left;
}
p=stack.pop();
p=p.right;
}
}
/*
* 树的非递归中序遍历
*/
public void InOrderTraverse(Node head){
Stack<Node> stack=new Stack<Node>();
Node p=head;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stak.push(p);
p=p.left;
}
p=stack.pop();
System.out.println(p.data);
p=p.right;
}
}
/*
* 树的非递归后序遍历
*/
public void PostOrderPrint(Node head){
Stack<Node> stack=new Stack<Node>();
Node p=head;
Node pre=p;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stack.push(p);
p=p.left;
}
p=stack.peek().right;
if(p==null||p==pre){
p=stack.pop();
System.out.print(p.data+" ");
pre=p;
p=null;
}
}
}