美文网首页
剑指offer 35- 二叉树中和为某一值的路径

剑指offer 35- 二叉树中和为某一值的路径

作者: 顾子豪 | 来源:发表于2021-05-22 10:29 被阅读0次

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

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

    给出二叉树如下所示,并给出num=22。
          5
         / \
        4   6
       /   / \
      12  13  6
     /  \    / \
    9    1  5   1
    
    输出:[[5,4,12,1],[5,6,6,5]]
    
    

    分析:
    递归遍历整颗树
    1定义结果数组和保存当前路径的数组
    2.如果根节点为空,直接返回
    3.否则就把根节点加入路径
    4.当走到叶子节点并且sum减到0,就把当前路径加到结果中
    5.否则就递归左右子树
    6.同时当前结点删掉,用以恢复现场
    时间复杂度:
    遍历整颗树,时间复杂度为O(N)

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> res;
        vector<int> path;
        vector<vector<int>> findPath(TreeNode* root, int sum) {
            dfs(root, sum);
            
            return res;
        }
        
        void dfs(TreeNode* root, int sum ) {
            if(!root) return;
            path.push_back(root->val);
            sum -= root->val;
            if(!root->left && !root->right && !sum) res.push_back(path);
            dfs(root->left, sum), dfs(root->right, sum);
            path.pop_back(); //当前结点删掉,恢复现场
        }
        
    };
    

    相关文章

      网友评论

          本文标题:剑指offer 35- 二叉树中和为某一值的路径

          本文链接:https://www.haomeiwen.com/subject/xgzljltx.html