题目一:
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
代码如下:
/**
* 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> > levelOrder(TreeNode *root) {
vector<vector<int>> res;
vector<int> layer;
if(root==NULL)
return res;
queue<TreeNode*> que;
que.push(root);
//下面这两个变量很重要,nowNode指队列中的当前节点,lastNode指队列中的最后一个节点
TreeNode *nowNode=root;
TreeNode *lastNode=root;
while(!que.empty())
{
nowNode=que.front();
que.pop();
layer.push_back(nowNode->val);
if(nowNode->left)
que.push(nowNode->left);
if(nowNode->right)
que.push(nowNode->right);
//判断一层是否遍历完,相等则说明遍历完成
if(nowNode==lastNode)
{
res.push_back(layer);
lastNode=que.back();
layer.clear();
}
}
return res;
}
};
题目二:
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],
]
代码如下:只需要把上面一题得到的res最后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>> res;
vector<int> layer;
if(root==NULL)
return res;
queue<TreeNode*> que;
que.push(root);
//下面这两个变量很重要,nowNode指队列中的当前节点,lastNode指队列中的最后一个节点
TreeNode *nowNode=root;
TreeNode *lastNode=root;
while(!que.empty())
{
nowNode=que.front();
que.pop();
layer.push_back(nowNode->val);
if(nowNode->left)
que.push(nowNode->left);
if(nowNode->right)
que.push(nowNode->right);
//判断一层是否遍历完,相等则说明遍历完成
if(nowNode==lastNode)
{
res.push_back(layer);
lastNode=que.back();
layer.clear();
}
}
reverse(res.begin(),res.end());
return res;
}
};
题目三:
Given a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree{3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
代码如下:也是在第一题答案的最后进行稍微修改得到最后的结果
/**
* 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