您的位置:首页 > 职场人生

Lintcode 二叉树的层次遍历

2017-08-18 15:06 260 查看
给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

您在真实的面试中是否遇到过这个题? Yes

样例

给一棵二叉树 {3,9,20,#,#,15,7} :

3

/ \

9 20

/ \

15 7

返回他的分层遍历结果:

[

[3],

[9,20],

[15,7]

]

code:

class Solution{
public:
vector< vector<int> > levelOrder(TreeNode *root) {
vector< vector<int> > re;
if(root == NULL){
return re;
}
queue<TreeNode*> que; //创建队列
que.push(root); //将根节点加入队列
int should_len = 1; //这一层应该有的节点数量
int null_len = 0; //这一层空节点的数量
vector<int> now_s; //缓存vector
while(!que.empty()){
TreeNode *t = que.front();
que.pop();
if (t == NULL){
null_len ++;
}
else{
now_s.push_back(t->val);
que.push(t->left);
que.push(t->right);
}
if(should_len == null_len + now_s.size()    //当达到某一层节点数量时(值的数量+空节点的数量==这层应该有的节点数)
&& now_s.size() != 0){
re.push_back(now_s);  //将缓存vector存入结果re
now_s.clear();  //清空缓存vector
should_len *= 2;
null_len *= 2;  //下一层空节点数量将以这一层空节点数目的二倍开始计数
}
}
return re;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息