LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
2014-04-15 08:37
351 查看
1,题目要求:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
return its level order traversal as:
2.
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree
return its bottom-up level order traversal as:
3.
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
return its zigzag level order traversal as:
代码:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
2.
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree
{3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]
3.
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] ]
代码:
class Solution { public: vector<vector<int> > ans; vector<vector<int> > levelOrder(TreeNode *root) { if (NULL == root) { return ans; } vector<TreeNode*> q; int next_level_cnt = 1;//记录下一层节点个数 int level_start = 0;//根节点索引从o开始 int level_idx = 1; q.push_back(root); while (level_start < q.size()) { vector<int> level; int cur_level_cnt = next_level_cnt; int level_end = level_start + cur_level_cnt;//计算当前层的结束位置 next_level_cnt = 0; for (size_t i = level_start; i < level_end; ++i) { TreeNode* node = q[i]; level.push_back(node->val); if(node->left != NULL) { q.push_back(node->left); ++next_level_cnt; } if(node->right != NULL) { q.push_back(node->right); ++next_level_cnt; } } ans.push_back(level); level_start += cur_level_cnt;//下层的开始位置 } return ans; } vector<vector<int> > zigzagLevelOrder(TreeNode *root) {//用两个栈逐层 if (NULL == root) { return ans; } stack<TreeNode*> even_st; stack<TreeNode*> odd_st; int level_idx = 1; int next_level_cnt = 1; int level_start = 0; odd_st.push(root); while (!odd_st.empty() || !even_st.empty()) { vector<int> level; // cout << "odd_st size : " << odd_st.size() << " even st size : " << even_st.size() << endl; if((level_idx & 1) == 1)//奇数层,将下一层的节点压入偶数栈 { while (!odd_st.empty()) { TreeNode* node = odd_st.top(); odd_st.pop(); level.push_back(node->val); if(node->left != NULL) even_st.push(node->left); if(node->right != NULL) even_st.push(node->right); } } else//如果是偶数层,将下一层节点压入奇数栈,并且先压入又孩子,再压入左孩子 { while (!even_st.empty()) { TreeNode* node = even_st.top(); even_st.pop(); level.push_back(node->val); if(node->right != NULL) odd_st.push(node->right); if(node->left != NULL) odd_st.push(node->left); } } ++level_idx; ans.push_back(level); } return ans; } };
相关文章推荐
- 103.leetcode Binary Tree Zigzag Level Order Traversal(medium)[二叉树层次遍历 栈]
- LeetCode-Binary Tree Zigzag Level Order Traversal-二叉树锯齿层次遍历-二叉树DFS层次遍历
- 【LeetCode】Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历 - Medium(LinkedIn)
- LeetCode: 103_Binary Tree Zigzag Level Order Traversal | 二叉树Zigzag层次遍历 | Medium
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
- Leetcode 107 Binary Tree Level Order Traversal II 二叉树层次遍历与倒转
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- LeetCode103 BinaryTreeZigzagLevelOrderTraversal(二叉树Z形层次遍历) Java题解
- LeetCode103 BinaryTreeZigzagLevelOrderTraversal(二叉树Z形层次遍历) Java题解
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】
- Binary Tree Zigzag Level Order Traversal (二叉树锯齿形层次遍历)
- Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
- [leetcode-二叉树层次遍历并统计每层节点数]--102. Binary Tree Level Order Traversal
- [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现
- Binary Tree Zigzag Level Order Traversal 二叉树按层遍历,zigzag输出@LeetCode
- leetcode---Binary Tree Zigzag Level Order Traversal---层次遍历
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)