Binary Tree Zigzag Level Order Traversal
2013-12-14 16:41
246 查看
居然一次就过了!喜大普奔啊有木有!
先上图,方便理解,左侧编号为level号。
![](https://img-blog.csdn.net/20131214163648781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzA4NjkwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在这里不能使用队列那种普通的广搜方法,那么怎么办呢?答案是用栈。
我使用了两个栈,记为s0和s1。我们首先将root推入s0,然后就开始对两个栈进行访问。在访问level为偶数的层时,从s0栈中往外弹节点,并且,将它的子女按照从左到右的顺序压入s1。在访问level为奇数的栈时,从s1往外弹节点,并且将其子女按从右到左的顺序压入s0。
这样一来就可以实现题目要求的访问了。可以对着图多看一会儿。
当然还有更简单的方法,就是还是和普通一样进行广搜,不同的是在最后将每层的序列推入结果时,如果是从右到左访问的话,将序列翻转一下再推入最后的结果就可以了。
http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
先上图,方便理解,左侧编号为level号。
在这里不能使用队列那种普通的广搜方法,那么怎么办呢?答案是用栈。
我使用了两个栈,记为s0和s1。我们首先将root推入s0,然后就开始对两个栈进行访问。在访问level为偶数的层时,从s0栈中往外弹节点,并且,将它的子女按照从左到右的顺序压入s1。在访问level为奇数的栈时,从s1往外弹节点,并且将其子女按从右到左的顺序压入s0。
这样一来就可以实现题目要求的访问了。可以对着图多看一会儿。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int>> res; if (root == NULL) return res; stack<TreeNode *> s0, s1; int level = 0; s0.push(root); while (!s0.empty() || !s1.empty()) { vector<int> tmp; if (level % 2 == 0) { while (!s0.empty()) { TreeNode *t = s0.top(); s0.pop(); if (t->left != NULL) s1.push(t->left); if (t->right != NULL) s1.push(t->right); tmp.push_back(t->val); } } else { while (!s1.empty()) { TreeNode *t = s1.top(); s1.pop(); if (t->right != NULL) s0.push(t->right); if (t->left != NULL) s0.push(t->left); tmp.push_back(t->val); } } level++; res.push_back(tmp); } return res; } };
当然还有更简单的方法,就是还是和普通一样进行广搜,不同的是在最后将每层的序列推入结果时,如果是从右到左访问的话,将序列翻转一下再推入最后的结果就可以了。
http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
相关文章推荐
- [LeetCode]题解(python):103-Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal——LeetCode
- 103. Binary Tree Zigzag Level Order Traversal
- leetcode--Binary Tree Zigzag Level Order Traversal
- #71 Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- [Lintcode]Binary Tree Zigzag Level Order Traversal
- leetcode---Binary Tree Zigzag Level Order Traversal---层次遍历
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- 【leetcode 层序遍历】Binary Tree Zigzag Level Order Traversal
- LeetCode-Binary Tree Zigzag Level Order Traversal
- LeetCode算法题目:Binary Tree Zigzag Level Order Traversal
- 【binary-tree-zigzag-level-order-traversal】
- LeetCode103 Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Leetcode: binary-tree-zigzag-level-order-traversal
- leetcode[103]:Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal