[抄题]:

给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)

[思维问题]:

不知道反复切换要怎么做:用boolean normalOrder当作布尔型控制变量

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

root一个点正常出入。第二层先左后右,出来就变成先右后左了。

[一刷]:

  1. 层遍历是放在原来的queue中,但是zigzag遍历的左右节点是放在下一层,另外一个栈next中。不要搞错
  2. 栈交换也是循环操作的,栈交换需要放在循环体里面

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[总结]:

[复杂度]:Time complexity: O(n) Space complexity: O(n)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

用两个栈:可以实现逆序,来回交换

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

层遍历

public class Solution {
/*
* @param root: A Tree
* @return: A list of lists of integer include the zigzag level order traversal of its nodes' values.
*/
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
//define
Stack<TreeNode> curt = new Stack<TreeNode>();
Stack<TreeNode> next = new Stack<TreeNode>();
Stack<TreeNode> temp = new Stack<TreeNode>();
List<List<Integer>> result = new ArrayList<List<Integer>>();
boolean normalOrder = true; if (root == null) {
return result;
} //put into stack
curt.push(root);
while (!curt.isEmpty()) {
List<Integer> level = new LinkedList<Integer>();
int size = curt.size();
for (int i = 0; i < size; i++) {
TreeNode node = curt.pop();
level.add(node.val);
if (normalOrder == true) {
if (node.left != null) {
next.push(node.left);//
}
if (node.right != null) {
next.push(node.right);
}
}
else {
if (node.right != null) {
next.push(node.right);
}
if (node.left != null) {
next.push(node.left);
}
}
}
result.add(level);
//reverse stack
temp = curt;
curt = next;
next = temp;
normalOrder = !normalOrder;//
} //output result
return result;
}
}

二叉树的锯齿形层次遍历 · Binary Tree Zigzag Level Order Traversal的更多相关文章

  1. LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)

    103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...

  2. [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  3. leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历

    // 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...

  4. [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现

    Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...

  5. Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树

    题目描述: Binary Tree Zigzag Level Order Traversal AC Rate: 399/1474 My Submissions Given a binary tree, ...

  6. 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)

    从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...

  7. LeetCode解题报告—— Unique Binary Search Trees & Binary Tree Level Order Traversal & Binary Tree Zigzag Level Order Traversal

    1. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that ...

  8. 【leetcode】Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...

  9. 【LeetCode】103. Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...

随机推荐

  1. Unreal Engine 4 性能优化工具(Profiler Tool)

    转自:http://aigo.iteye.com/blog/2296548 Profiler Tool Reference https://docs.unrealengine.com/latest/I ...

  2. Spring MVC 原生API

    原生API: Servlet环境中一些有用的对象: HttpServletRequest HttpServletResponse HttpSession Reader Writer InputStre ...

  3. UML类图的画法

    http://blog.csdn.net/kevin_darkelf/article/details/11371353

  4. Linux火焰图-centos

    centos7.5mini安装 yum install -y yum-utils perf debuginfo-install -y perf #debuginfo-install下载了305MB的文 ...

  5. PHP图片压缩

    <?php /** * 分享请保持网址.尊重别人劳动成果.谢谢. * 图片压缩类:通过缩放来压缩.如果要保持源图比例,把参数$percent保持为1即可. * 即使原比例压缩,也可大幅度缩小.数 ...

  6. 重识linux-RPM命令

    最近开始系统的学习linux,买了本 鸟哥的私房菜,当工具书  系统的看看 学习 多练习 才是王道 RPM是个很强大的命令 全称是 Redhat Package Management   红帽包管理工 ...

  7. jquery函数写法

    普通jquery函数写法 <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script&g ...

  8. openx _金额

    1/work/openx/lib/max/Delivery/log.php MAX_Delivery_log_logAdImpression    MAX_Delivery_log_logAdRequ ...

  9. JAVA JDBC 各大数据库的连接字符串和连接类

    oracle:     driverClass:oracle.jdbc.OracleDriver     url:jdbc:oracle:thin:@127.0.0.1:1521:dbname mys ...

  10. IOS HTTP访问端口

    Project dyld_sim raised exception class ENetHTTPClientException with message 'Error -1022 accessing ...