原题
原题链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
解题思路
该题比较常规,为BFS的层级遍历,具体的解题思路与题解可以参见题104:http://blog.csdn.net/wangt443/article/details/51839068
当栈中获得一层的所有节点时,可以将这些节点复制到一个新的临时的栈。如果是奇数层,则从左往右取出,如果是偶数层,则从右往左取出。
代码
public class Solution103 {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
boolean isOdd = true;
TreeNode currentNode = null;
Deque<TreeNode> stack = new LinkedList<TreeNode>();
Deque<TreeNode> tempStack = new LinkedList<TreeNode>();
List<Integer> oneLevel = new ArrayList<Integer>();
List<List<Integer>> allLevels = new ArrayList<List<Integer>>();
if (root != null)
stack.push(root);
while (!stack.isEmpty()){
tempStack = new LinkedList<TreeNode>(stack);
while (!tempStack.isEmpty()) {
if (isOdd)
currentNode = tempStack.removeFirst();
else
currentNode = tempStack.removeLast();
oneLevel.add(currentNode.val);
}
allLevels.add(new ArrayList<Integer>(oneLevel));
oneLevel.clear();
isOdd = !isOdd;
int size = stack.size();
while (size-- > 0){
currentNode = stack.pop();
if (currentNode.left != null)
stack.addLast(currentNode.left);
if (currentNode.right != null)
stack.addLast(currentNode.right);
}
}
return allLevels;
}
}