今天继续刷LeetCode,第107题,层次遍历二叉树,并自底向上输出。
分析:
可以借助队列来进行层次遍历二叉树,但是题目是使用容器,因此,可以通过递归的方法,遍历二叉树。先写一个函数创建容器,再执行一个函数用来遍历二叉树。这个函数用做递归调用每一层的所有节点。
问题:
1、容器的使用,可以是push_back,也可以是vector[n];
2、容器使用前得先申明一个空间,但是这样会占用部分内存。
优化:
可以先计算出二叉树的深度,然后再遍历,这样可以减少计算时间。
附上代码:
/**
* 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>> res;
if(root==NULL)
return res;
vector<int> tmp;
res.push_back(tmp);
int level=0;
leftToRight(root,res,level);
reverse(res.begin(),res.end());
return res;
}
void leftToRight(TreeNode* root,vector<vector<int>>& res,int level)
{
if(root==NULL)
return;
if(level>=res.size())
{
vector<int> tmp;
res.push_back(tmp);
}
res[level].push_back(root->val);
leftToRight(root->left,res,level+1);
leftToRight(root->right,res,level+1);
}
};