【Leetcode】Binary Tree Zigzag Level Order Traversal (Tree Traversal)

来源:互联网 发布:php生成word文档 编辑:程序博客网 时间:2024/06/06 17:01

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

[  [3],  [20,9],  [15,7]]

这道题由于每一次要等到上次的栈全部情况再进栈,所以需要两个栈来维护

奇数层维护是先左后右

偶数层维护是先右后左

代码参考Code_Ganker

public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();if (root == null)return result;LinkedList<TreeNode> stack = new LinkedList<TreeNode>();ArrayList<Integer> value = new ArrayList<Integer>();value.add(root.val);result.add(value);stack.push(root);int level = 1;while (!stack.isEmpty()) {LinkedList<TreeNode> newStack = new LinkedList<TreeNode>();value = new ArrayList<Integer>();while (!stack.isEmpty()) {TreeNode cur = stack.pop();if (level % 2 == 0) {if (cur.left != null) {newStack.push(cur.left);value.add(cur.left.val);}if (cur.right != null) {newStack.push(cur.right);value.add(cur.right.val);}} else {if (cur.right != null) {newStack.push(cur.right);value.add(cur.right.val);}if (cur.left != null) {newStack.push(cur.left);value.add(cur.left.val);}}}level++;if (value.size() > 0)result.add(value);stack = newStack;}return result;}


0 0