103. Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:最好的数据恢复 编辑:程序博客网 时间:2024/06/05 21:05
原题:
点击打开链接
层次遍历二叉树,但是要求按锯齿状输出(类似于蛇形)。
思考过程:
一开始想用双向队列。Deque<TreeNode> deque = new ArrayDeque();后来发现用栈就可以实现。栈和队列顺序相反,前者先进后出,后者先进先出。有点绕,但是最终还是解决了。
解题思路:
每层创建一个栈用于储存下一层(是按下一层输出顺序的倒序储存)。这里关键在于:
如果本行是正序输出的,那么下一行按先左子节点后右子节点的顺序将下一行节点添加到栈,这样下一行出栈就按照倒序输出了;
如果本行是按倒序倒序输出的,那就按先右子节点后左子节点的顺序将下一行节点添加到栈,这样下一行就按正序输出了。
结果代码:
List<List<Integer>> ret = new ArrayList<>(); public List<List<Integer>> zigzagLevelOrder(TreeNode root) { if (root == null) return ret; Stack<TreeNode> stack = new Stack<>(); stack.add(root); recursive(stack,false); return ret; } public void recursive(Stack<TreeNode> stack,boolean reverse){//reverse表示这个栈里元素出栈后形成的是否翻转过,如果是,就是false if (stack.isEmpty()) return; Stack<TreeNode> newStack = new Stack<>(); List<Integer> subRet = new ArrayList<>(); while (!stack.isEmpty()){ TreeNode treeNode = stack.pop(); subRet.add(treeNode.val); TreeNode left = treeNode.left; TreeNode right = treeNode.right; if (!reverse) {//如果栈里元素输出后是正序,下一行元素按先左后右添加子节点到新的栈 if (left != null) newStack.add(left); if (right != null) newStack.add(right); } else {//如果栈里元素输出后是倒序,按先有后左顺序添加子节点到新的栈 if (right != null) newStack.add(right); if (left != null) newStack.add(left); } } ret.add(subRet); recursive(newStack,!reverse); }
阅读全文
0 0
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- webpack配置的entry和output new
- 扑克牌 BZOJ
- SpringMVC返回视图
- 阻塞队列LinkedBlockingQueue源码分析
- Android笔记
- 103. Binary Tree Zigzag Level Order Traversal
- 【第八周项目4】字符串加密
- vxworks shell 调试常用命令
- 对视频压缩的小科普
- deeplearning_Optimization methods
- SQL Group by
- 【2014acm西安现场赛】A
- Python语言基础-01
- OJ第二次作业第三题