二叉树中和为某一值的路径

// 面试题34:二叉树中和为某一值的路径
    // 题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
    // 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
    static std::vector> find_path(const std::shared_ptr>& root, int num)
    {
        std::vector> matrix;
        if(root == nullptr)
        {
            return matrix;
        }

        std::vector path;
        int sum = 0;
        _find_path(root, num, path, sum, matrix);

        return matrix;
    }

    static void _find_path(const std::shared_ptr>& root,
                         int num, std::vector& path, int& sum,
                         std::vector>& matrix)
    {
        sum += root->data;
        path.push_back(root->data);

        // 如果是叶结点,并且路径上结点的和等于输入的值
        // 打印出这条路径
        if(sum == num && root->left == nullptr && root->right == nullptr)
        {
            std::vector temp;
            for(auto& t:path)
            {
                temp.push_back(t);
            }
            matrix.push_back(temp);
        }

        // 如果不是叶结点,则遍历它的子结点
        if(root->left != nullptr)
        {
            _find_path(root->left, num, path, sum, matrix);
        }

        if(root->right != nullptr)
        {
            _find_path(root->right, num, path, sum, matrix);
        }

        // 在返回到父结点之前,在路径上删除当前结点,
        // 并在currentSum中减去当前结点的值
        sum -= root->data;
        path.pop_back();
    }

 

你可能感兴趣的:(算法)