今天开始学Java 二叉树的遍历

import java.util.Stack;
public class Tree {
public class TreeNode{
int val;
TreeNode right;
TreeNode left;
public TreeNode(int val){
this.val = val;
}
}
//递归前序遍历
public void DGpreOder(TreeNode B){
System.out.println(B.val);
DGpreOder(B.left);
DGpreOder(B.right);

}

//非递归前序遍历

public void preOder(TreeNode B){
if(B == null) return;
Stack<TreeNode> s = new Stack<TreeNode>();
while(B !=null || !s.isEmpty()){
while(B != null){
System.out.println(B.val);
s.push(B);
B=B.left;
}
if(!s.isEmpty()){
B= s.pop();
B=B.right;

}
}

}

//递归中序遍历

public void DGmidOrder(TreeNode B){
DGmidOrder(B.left);
System.out.println(B.val);
DGmidOrder(B.right);

}

//非递归中序遍历

public void midOrder(TreeNode B){
if(B == null) return;
Stack<TreeNode> s = new Stack<TreeNode>();
while( B !=null || !s.isEmpty()){
while( B!=null){
s.push(B);
B=B.left;
}
if(!s.isEmpty()){
B=s.pop();
System.out.println(B.val);
B = B.right;
}

}

}

//递归后续

public void DGpostOder(TreeNode B){
DGpostOder(B.left);
DGpostOder(B.right);
System.out.println(B.val);

}

//非递归后序遍历

public void postOrder(TreeNode B){
if(B == null) return;
Stack<TreeNode> s1= new Stack<TreeNode>();
Stack<Integer> s2 = new Stack<Integer>();
Integer i = new Integer(1);
while(B !=null||!s1.isEmpty()){
while(B !=null){
s1.push(B);
s2.push(0);
B = B.left;
}
//这个循坏的目的是对栈s2栈顶为1时对应的栈s1的栈顶元素进行访问
while(!s1.isEmpty() && s2.peek().equals(i)){
System.out.println(B);
s2.pop();
s1.pop();
 
}
//访问左子树到头后,就可以访问其右孩子了
if(!s1.isEmpty()){
s2.pop();
s2.push(i);
B = s1.peek();
B= B.right;

}
}


}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值