leetcode Binary Tree Level Order Traversal II
2014-11-29 15:26
399 查看
是这题的变种
对一棵树从最后一次开始层次遍历,并返回结果。例如:
Given binary tree
return its bottom-up level order traversal as:
思路:用一个queue遍历每行,行与行之间NULL分开,然后用stack记录每次的结果,最后将stack中的导出:
后面发现其实stack是多此一举了,可以直接输入到ans中,然后最后利用reverse函数将容器反转即可。
View Code
对一棵树从最后一次开始层次遍历,并返回结果。例如:
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] ]
思路:用一个queue遍历每行,行与行之间NULL分开,然后用stack记录每次的结果,最后将stack中的导出:
/** * 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> > levelOrderBottom(TreeNode *root) { vector<vector<int> > ans; if (!root) return ans; queue<TreeNode *> que; stack<vector<int> > sta; vector<int> tmp; TreeNode *p; que.push(root); que.push(NULL); while(!que.empty()) //先把结果放在stack中 { p = que.front(); if (p != NULL) { tmp.push_back(p -> val); if (p -> left) que.push(p -> left); if (p -> right) que.push(p -> right); que.pop(); } else { que.pop(); sta.push(tmp); tmp.clear(); if (!que.empty()) { que.push(NULL); } } } while(!sta.empty()) // 导出结果 { ans.push_back(sta.top()); sta.pop(); } return ans; } };
后面发现其实stack是多此一举了,可以直接输入到ans中,然后最后利用reverse函数将容器反转即可。
/** * 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> > levelOrderBottom(TreeNode *root) { vector<vector<int> > ans; if (!root) return ans; queue<TreeNode *> que; vector<int> tmp; TreeNode *p; que.push(root); que.push(NULL); while(!que.empty()) //先把结果放在stack中 { p = que.front(); if (p != NULL) { tmp.push_back(p -> val); if (p -> left) que.push(p -> left); if (p -> right) que.push(p -> right); que.pop(); } else { que.pop(); ans.push_back(tmp); tmp.clear(); if (!que.empty()) { que.push(NULL); } } } reverse(ans.begin(), ans.end()); return ans; } };
View Code
相关文章推荐
- [Leetcode]Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II --leetcode C++
- [LeetCode]Binary Tree Level Order Traversal II,解题报告
- 【LeetCode】107 - Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II(LeetCode)
- leetcode107——Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- 【Leetcode】Binary Tree Level Order Traversal II (Tree Traversal)
- LeetCode力扣之107. Binary Tree Level Order Traversal II
- leetCode No.107 Binary Tree Level Order Traversal II
- Leetcode: Binary Tree Level Order Traversal II 理解分析
- LeetCode(26)-Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II [LeetCode]
- LeetCode Binary Tree Level Order Traversal II
- LeetCode 之 Binary Tree Level Order Traversal II
- [leetcode-107]Binary Tree Level Order Traversal II(java)
- [LeetCode] Binary Tree Level Order Traversal II
- leetcode7:Binary Tree Level Order Traversal II