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] ]
题目解析:跟level order tranversal一样只是需要先保存在一个栈中,然后再弹出。
#include <iostream>
#include <stack>
#include <vector>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<vector<int> > levelOrderBottom(TreeNode *root) {
vector<vector<int> > res;
queue<TreeNode *> nodeList;
stack<vector<int>> tempRes;
if(root == NULL)
return res;
nodeList.push(root);
int lastLevel = 1;
int currLevel = 0;
vector<int> data;
data.clear();
while(!nodeList.empty())
{
TreeNode *temp = nodeList.front();
data.push_back(temp->val);
lastLevel--;
nodeList.pop();
if(temp->left != NULL)
{
nodeList.push(temp->left);
currLevel++;
}
if(temp->right != NULL)
{
nodeList.push(temp->right);
currLevel++;
}
if(lastLevel == 0)
{
lastLevel = currLevel;
currLevel = 0;
tempRes.push(data);
data.clear();
}
}
while(!tempRes.empty())
{
res.push_back(tempRes.top());
tempRes.pop();
}
return res;
}
int main(void)
{
system("pause");
return 0;
}