import java.util.*;
public class Main{
public static void main(String[] args) {
int[] a = new int[]{3,8,4,6,7,9,1,3};
//int[] a = new int[]{3,3,3,3,3,1};
node n3 = new node(3,null,null);
node n2 = new node(2,null,new node(4,null,null));
node n5 = new node(5,n3,n2);
node n6 = new node(6,null,null);
node n7 = new node(7,null,n6);
node n1 = new node(1,n5,n7);
postOrder(n1);
}
public static void preOrder(node root){
if(root==null)return;
System.out.println(root.val);
preOrder(root.left);
preOrder(root.right);
}
public static void preOrder2(node root){
Stack<node> s = new Stack<>();
s.push(root);
while(!s.isEmpty()){
node cur = s.pop();
System.out.println(cur.val+" ");
if(cur.right!=null){
s.push(cur.right);
}
if(cur.left!=null){
s.push(cur.left);
}
}
}
public static void midorder(node root){
Stack<node> s = new Stack<>();
while(root!=null){
s.push(root);
root = root.left;
}
while(!s.isEmpty()){
node cur = s.pop();
System.out.println(cur.val);
if(cur.right!=null){
cur = cur.right;
while(cur!=null){
s.push(cur);
cur=cur.left;
}
}
}
}
public static void postOrder(node root){
Stack<node> s = new Stack<>();
while(root!=null){
s.push(root);
root = root.left;
}
node pre=null;
while(!s.isEmpty()){
node cur = s.pop();
if(cur.right!=null&&cur.right!=pre){ //确定其右子树不是刚刚访问过的
s.push(cur);
cur = cur.right;
while(cur!=null){
s.push(cur);
cur=cur.left;
}
}else{
System.out.println(cur.val);
pre = cur;
}
}
}
static class node{
int val;
node left;
node right;
public node(int val, node left, node right) {
this.val = val;
this.left = left;
this.right = right;
}
public node() {
}
}
}
树的遍历
最新推荐文章于 2024-01-24 15:58:46 发布