/**
* Definition for a binary tree node.
* 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>> result;
if(root == NULL) //如果树为空
return result;
queue<TreeNode* > q;
q.push(root);
q.push(NULL);//放入根节点所在层
stack<TreeNode* > s;
while(q.size() > 1)
{
TreeNode* t = q.front();
q.pop();
s.push(t);//将结果放在stack中
if(t == NULL)
{
q.push(NULL);
continue;
}
//注意是先放right节点,再放left节点,这样才能保证stack先左子树后右子树
if(t->right!=NULL)
q.push(t->right);
if(t->left !=NULL)
q.push(t->left);
}
vector<int> tmp;
while(s.size() > 0)
{
TreeNode* t = s.top();
s.pop();
if(t == NULL)
{
if(tmp.size() > 0)
result.push_back(tmp);
tmp.clear();
continue;
}
tmp.push_back(t->val);
}
if(tmp.size() > 0)//一定要记得这句,否则有些节点无法加入
result.push_back(tmp);
return result;
}
};
Binary Tree Level Order Traversal II
最新推荐文章于 2024-08-23 15:23:16 发布