您的位置:首页 > 其它

[LeetCode] Binary tree level order traversal I & II

2013-03-15 09:02 519 查看
1. 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]
]


class Solution {
public:
vector<vector<int> > levelOrder(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int>> result;
helper(root,result,0);
return result;
}
void helper(TreeNode *root, vector<vector<int>> &result, int level)
{
if(root==NULL)
return;

if(result.size() <= level)
{
vector<int> tmp;
result.push_back(tmp);
}
result.at(level).push_back(root->val);
helper(root->left,result,level+1);
helper(root->right,result, level+1);
}
};


2. 倒序输出:

[
[15,7]
[9,20],
[3],
]


思路:先求总高度,然后遍历,将第i层的节点放入height-i-1个结果中。 或者和第一题一样,最后倒置结果即可。

class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int height=get_height(root);
vector<vector<int>> result(height);
bottomuptraverse(root,result,0,height);
return result;
}
int get_height(TreeNode *root)
{
if(root==NULL) return 0;

int leftheight=get_height(root->left);
int rightheight=get_height(root->right);
if(leftheight >= rightheight)
return leftheight+1;
else
return rightheight+1;
}
void bottomuptraverse(TreeNode *root, vector<vector<int>> &result, int level, int height)
{
if(root==NULL)
{
return;
}

bottomuptraverse(root->left,result,level+1,height);
bottomuptraverse(root->right,result,level+1,height);
result.at(height-level-1).push_back(root->val);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: