练习二叉树(day02)
- 分行从上往下打印二叉树
样例:
输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null]
8
/ \
12 2
/
6
/
4
输出:[[8], [12, 2], [6], [4]]
vector<int>get_val(vector<TreeNode*>level){
vector<int>ans;
for(auto u:level)
ans.push_back(u->val);
return ans;
}
vector<vector<int>> printFromTopToBottom(TreeNode* root) {
vector<vector<int>>res;
if(!root)return res;
vector<TreeNode*>level;
level.push_back(root);
res.push_back({root->val});
while(true){
vector<TreeNode*>newlevel;
for(auto u:level){
if(u->left)newlevel.push_back(u->left);
if(u->right)newlevel.push_back(u->right);
}
if(!newlevel.size())break;
level=newlevel;
res.push_back(get_val(level));
}
return res;
}
- 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
保证树中结点值均不小于 0。
vector<vector<int>>res;
vector<int>path;
vector<vector<int>> findPath(TreeNode* root, int sum) {
dfs(root,0,sum);
return res;
}
void dfs(TreeNode* root, int sum,int target){
if(!root)return ;
path.push_back(root->val);
sum+=root->val;
if(!root->left&&!root->right){
if(sum==target)res.push_back(path);
}
if(root->left)dfs(root->left,sum,target);
if(root->right)dfs(root->right,sum,target);
path.pop_back();
}