使用一个队、一个栈成功AC
二叉树的之字形层序遍历
http://www.nowcoder.com/questionTerminal/47e1687126fa461e8a3aff8632aa5559
使用一个队一个栈
先入队根节点
进入循环 出循环的条件为栈和队都为null时
遍历队,将左孩子入栈,再将右孩子入栈,直到栈为null
再去遍历栈,依次出栈直到栈为null,将对应元素的右孩子入队,再其次是左孩子入队
如此反复即可找到结果
public class Solution { /** * * @param root TreeNode类 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder (TreeNode root) { // write code here if(root == null){ return new ArrayList<>(); } Stack<TreeNode> stack = new Stack<>(); LinkedList<TreeNode> queue = new LinkedList<>(); queue.offer(root); ArrayList<ArrayList<Integer>> res = new ArrayList<>(); while(!queue.isEmpty() || !stack.isEmpty()){ ArrayList<Integer> are = new ArrayList<>(); while(!queue.isEmpty()){ TreeNode tmp = queue.removeLast(); are.add(tmp.val); if(tmp.left != null){ stack.push(tmp.left); } if(tmp.right != null){ stack.push(tmp.right); } } res.add(are); are = new ArrayList<>(); //判断队列 while(!stack.isEmpty()){ TreeNode tmp = stack.pop(); are.add(tmp.val); if(tmp.right != null){ queue.add(tmp.right); } if(tmp.left != null){ queue.add(tmp.left); } } if(are.size()!=0){ res.add(are); } } return res; } }