您的位置:首页 > 编程语言 > Java开发

递归与非递归实现树的遍历(java)

2016-12-13 16:52 316 查看
package test;
import java.util.Stack;
public class Sort {
public static void main(String[] args) {
Node root9=new Node(9,null,null);
Node root8=new Node(8,null,null);
Node root7=new Node(7,null,null);
Node root6=new Node(6,null,null);
Node root5=new Node(5,null,null);
Node root4=new Node(4,root8,root9);
Node root3=new Node(3,root6,root7);
Node root2=new Node(2,root4,root5);
Node root1=new Node(1,root2,root3);
System.out.println("pre...");
preOrderTraverse(root1);
System.out.println();
preOrderTraverseNoRecursion(root1);
System.out.println();
System.out.println("in...");
inOrderTraverse(root1);
System.out.println();
inOrderTraverseNoRecursion(root1);
System.out.println();
System.out.println("post...");
postOrderTraverse(root1);
System.out.println();
postOrderTraverseNoRecursion(root1);
System.out.println();

}
static class Node{
public Node(Integer data,Node left,Node right) {
this.data=data;
this.left=left;
this.right=right;
}
public Node() {
super();
}
Integer data;
Node left;
Node right;
}
static void preOrderTraverse(Node root){
if(root!=null){
System.out.print(root.data+" ");
preOrderTraverse(root.left);
preOrderTraverse(root.right);
}
}
static void preOrderTraverseNoRecursion(Node root){
Stack<Node> s=new Stack<Node>();
Stack<Node> s1=new Stack<Node>();
Node p,p1;
s.push(root);
while(!s.isEmpty()){
while((p=s.lastElement())!=null){
System.out.print(p.data+" ");
s.push(p.left);
}
s.pop();
if(!s.isEmpty()){
p=s.pop();
s.push(p.right);
}
}
}
static void inOrderTraverse(Node root){
if(root!=null){
inOrderTraverse(root.left);
System.out.print(root.data+" ");
inOrderTraverse(root.right);
}
}
static void inOrderTraverseNoRecursion(Node root){
Stack<Node> s=new Stack<Node>();
Stack<Node> s1=new Stack<Node>();
Node p,p1;
s.push(root);
while(!s.isEmpty()){
while((p=s.lastElement())!=null){
s.push(p.left);
}
s.pop();
if(!s.isEmpty()){
p=s.pop();
System.out.print(p.data+" ");
s.push(p.right);
}
}
}
static void postOrderTraverse(Node root){
if(root!=null){
postOrderTraverse(root.left);
postOrderTraverse(root.right);
System.out.print(root.data+" ");
}
}

static void postOrderTraverseNoRecursion(Node root){
Stack<Node> s=new Stack<Node>();
Stack<Node> s1=new Stack<Node>();
Node p,p1;
s.push(root);
while(!s.isEmpty()){
while((p=s.lastElement())!=null){
s.push(p.left);
}
s.pop();
while(!s1.isEmpty()&&s1.lastElement()==s.lastElement()){
s.pop();
p1=s1.pop();
System.out.print(p1.data+" ");
}
if(!s.isEmpty()){
p=s.lastElement();
s1.push(p);
s.push(p.right);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: