【leetcode】二叉树的锯齿形层次遍历

题目要求

二叉树的锯齿形层次遍历

这个程序没写出来,摘抄了九章算法的代码,方便复习整理。
https://www.jiuzhang.com/solutions/binary-tree-zigzag-level-order-traversal/

核心思想

利用stack的办法解决。也可以用普通层次遍历的方法倒序输出。

完整代码如下

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * 
 * 二叉树的锯齿形层次遍历
 *
 */
public class Solution {

	class TreeNode {
		int val;
		TreeNode left;
		TreeNode right;
		TreeNode(int val) {
			this.val = val;
		}
	}
	
	public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
		List<List<Integer>> result = new ArrayList<List<Integer>>();
		if(root == null) {
			return result;
		}
		Stack<TreeNode> currLevel = new Stack<>();
		Stack<TreeNode> nextLevel = new Stack<>();
		Stack<TreeNode> temp ;
		currLevel.push(root); //入栈 
		boolean normalOrder = true;	//初始,即奇数层为简单层次遍历
		while(!currLevel.isEmpty()) {
			ArrayList<Integer> currLevelResult = new ArrayList<>();
			while(!currLevel.isEmpty()) {
				TreeNode node = currLevel.pop();
				currLevelResult.add(node.val);
			
				if(normalOrder) {
					if(node.left != null) {
						nextLevel.push(node.left);
					}
					if(node.right != null) {
						nextLevel.push(node.right);
					}
				} else {
					if(node.right != null) {
						nextLevel.push(node.right);
					}
					if(node.left != null) {
						nextLevel.push(node.left);
					}
				}
			}
			result.add(currLevelResult);
			temp = currLevel;
			currLevel = nextLevel; 
			nextLevel = temp;
			normalOrder = !normalOrder;
		}
		
		return result;
		
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值