练习二叉树(day02)

wuchangjian2021-11-02 17:20:51编程学习
  1. 分行从上往下打印二叉树
样例:
输入如下图所示二叉树[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;
    }
  1. 二叉树中和为某一值的路径

输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。

从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

保证树中结点值均不小于 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();
    }

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。