T56:之字形打印二叉树(Java)

题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

分析:方法一 建立2个栈,s1放基数层,s2放偶数层 temp为临时存放每一层的数值的链表

int level=1;
		Stack<TreeNode> s1=new Stack<TreeNode>();
		s1.add(pRoot);
		Stack<TreeNode> s2=new Stack<TreeNode>();
		ArrayList<ArrayList<Integer>> list= new ArrayList<ArrayList<Integer>>();
		while(!s1.isEmpty()||!s2.isEmpty()){
			if(level%2!=0){
				ArrayList<Integer> temp=new ArrayList<Integer>();
				while(!s1.isEmpty()){
					 TreeNode node=s1.pop();
					 if(node!=null){
						 temp.add(node.val);
						 s2.add(node.left);
						 s2.add(node.right);
					 }
				}
					if(!temp.isEmpty()){
						list.add(temp);
						level++;
					}
				} 
			else{
				ArrayList<Integer> temp=new ArrayList<Integer>();
				while(!s2.isEmpty()){
					TreeNode node=s2.pop();
					if(node!=null){
					temp.add(node.val);
					s1.add(node.right);
					s1.add(node.left);
					}
				}
				if(!temp.isEmpty()){
					list.add(temp);
					level++;
				}
			}
			
		}
		return list;

参考:https://blog.csdn.net/ouyangyanlan/article/details/72878992

拓展:用之字形打印矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值