之字形打印二叉树

Posted blythe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了之字形打印二叉树相关的知识,希望对你有一定的参考价值。

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
		List<List<Integer>> ans = new ArrayList<>();
		if (root == null)
			return ans;
		// 使用两个栈维护顺序
		Stack<TreeNode> stack = new Stack<>();
		Stack<TreeNode> nextStack = new Stack<>();
		stack.add(root);
		int flag = 0;
		List<Integer> lay = new ArrayList<>();
		while (!stack.isEmpty()) {
			TreeNode node = stack.pop();
			lay.add(node.val);
			// 如果当前是从左到右遍历,按左子树右子树的顺序添加
			if (flag == 0) {
				if (node.left != null)
					nextStack.add(node.left);
				if (node.right != null)
					nextStack.add(node.right);
			} else// 如果当前是从右到左遍历,按右子树左子树的顺序添加
			{
				if (node.right != null)
					nextStack.add(node.right);
				if (node.left != null)
					nextStack.add(node.left);
			}
			if (stack.isEmpty()) {
				// 交换两个栈
				Stack<TreeNode> tmp = stack;
				stack = nextStack;
				nextStack = tmp;
				// 标记下一层处理的方向
				flag = 1 - flag;
				ans.add(new ArrayList<>(lay));
				lay.clear();
			}
		}
		return ans;

	}

以上是关于之字形打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer-按之字形打印二叉树

剑指offer JZ77 按之字形顺序打印二叉树

按之字形顺序打印二叉树

NC14 按之字形顺序打印二叉树

之字形打印二叉树

剑指:之字形打印二叉树