您的位置:首页 > 其它

实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式

2018-03-10 21:17 861 查看
import java.util.Stack;
public class C01_PreInPosTraversal {
public static class Node{
public int value;
public Node left;
public Node right;
public Node(int value){
this.value = value;
}
}
////////////////////////递归版本///////////////////////////
//递归实现先序遍历
public static void recursivePreOrder(Node head){
if(head==null){
return ;
}
System.out.print(head.value+" ");
recursivePreOrder(head.left);
recursivePreOrder(head.right);
}
//递归实现中序遍历
public static void recursiveInOrder(Node head){
if(head==null){
return ;
}
recursiveInOrder(head.left);
System.out.print(head.value+" ");
recursiveInOrder(head.right);
}
//递归实现后序遍历
public static void recursivePosOrder(Node head){
if(head==null){
return ;
}
recursivePosOrder(head.left);
recursivePosOrder(head.right);
System.out.print(head.value+" ");
}
////////////////////////非递归版本///////////////////////////
//非递归版先序遍历
public static void unRecursivePreOrder(Node head){
if(head==null){
return ;
}
Stack<Node>stack = new Stack<Node>();
stack.push(head);
while(!stack.isEmpty()){
head = stack.pop();
System.out.print(head.value+" ");
if(head.right != null){//先压右子节点,再压左子节点0
stack.push(head.right);
}
if(head.left != null){
stack.push(head.left);
}
}
System.out.println();
}
//非递归版中序遍历
public static void unRecursiveInOrder(Node head){
if(head == null){
return ;
}
Stack<Node>stack = new Stack<Node>();
while(head!=null || !stack.isEmpty()){
if(head!=null){
stack.push(head);
head = head.left;
}else {
head = stack.pop();
System.out.print(head.value+" ");
head = head.right;
}
}
System.out.println();
}
//非递归版后序遍历
public static void unRecuesivePosOrder(Node head){
if(head == null){
return ;
}
Stack<Node>stack = new Stack<Node>();
stack.push(head);
Stack<Node>resNodes = new Stack<Node>();
while(!stack.isEmpty()){
head = stack.pop();
resNodes.push(head);
if(head.left!=null){
stack.push(head.left);
}
if(head.right != null){
stack.push(head.right);
}
}
while(!resNodes.isEmpty()){
System.out.print(resNodes.pop().value+" ");
}
}
//test
public static void main(String[] args) {
Node head = new Node(5);
head.left = new Node(3);
head.right = new Node(8);
head.left.left = new Node(2);
head.left.right = new Node(4);
head.left.left.left = new Node(1);
head.right.left = new Node(7);
head.right.left.left = new Node(6);
head.right.right = new Node(10);
head.right.right.left = new Node(9);
head.right.right.right = new Node(11);

// recursive
System.out.println("==============recursive=============");
System.out.print("pre-order: ");
recursivePreOrder(head);
System.out.println();
System.out.print("in-order: ");
recursiveInOrder(head);
System.out.println();
System.out.print("pos-order: ");
recursivePosOrder(head);
System.out.println();

// unrecursive
System.out.println("============unrecursive=============");
System.out.print("pre-order: ");
unRecursivePreOrder(head);
System.out.print("in-order: ");
unRecursiveInOrder(head);
System.out.print("pro-order: ");
unRecuesivePosOrder(head);
//posOrderUnRecur2(head);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐