二叉树的层次遍历
-
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如: 给定二叉树: [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7 返回其层次遍历结果:[ [3], [9,20], [15,7] ]
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
if (root == NULL)
return ans;
queue<TreeNode*> Q;
Q.push(root);
while(!Q.empty())
{
vector<int> temp;
int lens = Q.size();
for(int i=0; i < lens; i++)
{
TreeNode* p = Q.front();
Q.pop();
temp.push_back(p->val);
if(p->left)
Q.push(p->left);
if(p->right)
Q.push(p->right);
}
ans.push_back(temp);
}
return ans;
}
};
-
例如: 给定二叉树 [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ]。
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> ans;
if(root == NULL)
return ans;
queue<TreeNode*> inputQ;
inputQ.push(root);
while(!inputQ.empty())
{
vector<int> temp;
int len = inputQ.size();
for (int i = 0; i < len; i++)
{
TreeNode* p = inputQ.front();
inputQ.pop();
temp.push_back(p->val);
if (p->left)
inputQ.push(p->left);
if (p->right)
inputQ.push(p->right);
}
ans.insert(ans.begin(), temp);
}
return ans;
}
};