【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
来源:互联网 发布:出售数据资源 编辑:程序博客网 时间:2024/06/05 13:22
【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
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]]
题目大意
给定一棵二叉树,从顶向下,进行Z字形分层遍历,即:如果本层是从左向右的,下层就是从右向左。
解题思路
二叉树分层遍历进行改进,使用两个栈来进行。
代码实现
树结点类
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}
算法实现类
import java.util.Deque;import java.util.LinkedList;import java.util.List;/** * Author: 王俊超 * Date: 2015-06-23 * Time: 13:24 * Declaration: All Rights Reserved !!! */public class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new LinkedList<>(); if (root == null) { return result; } // 遍历标志,0表示从左到右,1表示从右到左 int flag = 0; TreeNode node; // 记录每一层的元素 List<Integer> lay = new LinkedList<>(); // 双向队列,当作栈来使用,记录当前层待处理结点 Deque<TreeNode> stack = new LinkedList<>(); // 记录下一层待处理结点 Deque<TreeNode> nextStack = new LinkedList<>(); stack.add(root); while (!stack.isEmpty()) { // 删除栈顶元素 node = stack.removeLast(); // 结果入队 lay.add(node.val); // 如果当前是从左到右遍历,按左子树右子树的顺序添加 if (flag == 0) { if (node.left != null) { nextStack.addLast(node.left); } if (node.right != null) { nextStack.addLast(node.right); } } // 如果当前是从右到左遍历,按右子树左子树的顺序添加 else { if (node.right != null) { nextStack.addLast(node.right); } if (node.left != null) { nextStack.addLast(node.left); } } // 当前层已经处理完了 if (stack.isEmpty()) { Deque<TreeNode> temp = nextStack; nextStack = stack; stack = temp; // 标记下一层处理的方向 flag = 1 - flag; // 保存本层结果 result.add(lay); // 创建新的链表处理下一层的结果 lay = new LinkedList<>(); } } return result; }}
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。
特别说明
欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47354341】
3 1
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
- Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
- (二叉树z字形层次遍历)LeetCode#103. Binary Tree Zigzag Level Order Traversal
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- 【LeetCode-面试算法经典-Java实现】【102-Binary Tree Level Order Traversal(二叉树层序遍历)】
- leetCode 103.Binary Tree Zigzag Level Order Traversal (二叉树Z字形水平序) 解题思路和方法
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- Binary Tree Level Order Traversal 分层遍历二叉树@LeetCode
- Leetcode Binary Tree Level Order Traversal 二叉树分层遍历
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- LeetCode OJ 之 Binary Tree Zigzag Level Order Traversal (二叉树的曲线层次遍历)
- LeetCode 103. Binary Tree Zigzag Level Order Traversal(二叉树之字形遍历)
- LeetCode 102. Binary Tree Level Order Traversal(二叉树分层遍历)
- LeetCode 107. Binary Tree Level Order Traversal II(二叉树分层遍历)
- Leetcode 103. Binary Tree Zigzag Level Order Traversal 二叉树Zigzag遍历 解题报告
- Binary Tree Zigzag Level Order Traversal 之字形遍历二叉树
- LeetCode—Binary Tree Zigzag Level Order Traversal 二叉树的Z扫描
- 【LeetCode-面试算法经典-Java实现】【094-Binary Tree Inorder Traversal(二叉树中序遍历)】
- PyQt5初级教程--PyQt5中的布局管理[5/13]
- HDU 4362 Dragon Ball(维护最小值DP优化)
- 如何用FtpWebRequest 传送巨大文件
- iOS9公测版下载安装详细图文教程
- Android持久化js的localstorage
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
- 【LeetCode-面试算法经典-Java实现】【102-Binary Tree Level Order Traversal(二叉树层序遍历)】
- C语言的条件运算符
- 【LeetCode-面试算法经典-Java实现】【104-Maximum Depth of Binary Tree(二叉树的最大深度)】
- 对配置性编程的一点看法
- JAVA常用日期比较操作说明
- 笛卡尔积算法的Java实现
- springmvc的执行流程详解
- Android权限大全代码