二叉树非递归遍历

二叉树的递归遍历非常简单,今天写了非递归遍历的方式

前序遍历和中序遍历类似,唯一的不同是前序遍历立即访问根节点,中序遍历在遍历右子树之前访问根节点

后序遍历用两个栈实现

import java.util.Stack;

public class TraversalBTree {

	//前序遍历
	public static void preTraver(BTree node) {
		BTree tree = node;
		Stack<BTree> stack = new Stack<BTree>();

		while (tree != null || !stack.isEmpty()) {
			while (tree != null) {
				System.out.println(tree.value);//输出根节点
				stack.push(tree);//根节点入栈
				
				tree = tree.left;//遍历左子树
			}

			if (!stack.isEmpty()) {
				tree = stack.pop();
				tree = tree.right;//遍历右子树
			}
		}
	}
	
	//中序遍历
	public static void midTraver(BTree node){
		BTree tree=node;
		Stack<BTree> stack = new Stack<BTree>();
		
		while (tree != null || !stack.isEmpty()) {
			while (tree != null) {			
				stack.push(tree);//根节点入栈			
				tree = tree.left;//遍历左子树		
			}

			if (!stack.isEmpty()) {
				tree = stack.pop();				
				System.out.println(tree.value);//输出根节点	
				tree = tree.right;//遍历右子树
			}
		}	
	}
	
	//后序遍历,双栈
	public static void postTraver(BTree node){
		BTree tree=node;
		
		Stack<BTree> stack=new Stack<BTree>();
		Stack<BTree> temp=new Stack<BTree>();
		
		while(tree!=null||!stack.isEmpty()){
			while(tree!=null){
				stack.push(tree);
				temp.push(tree);
				tree=tree.right;
			}
			if(!stack.isEmpty()){
				tree=stack.pop();
				tree=tree.left;
			}
		}
		while(!temp.isEmpty()){
			System.out.println(temp.pop().value);//输出结果
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值