编程思路总结——递归

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

路径:从树的根节点到叶子节点经过的节点形成的路径,例如途中(10,5,4),(10,5,7),(10,12)

满足和为22的路径有(10,5,7)、(10,12)

 

编程思路总结——递归

参考代码

void FindPath(TreeNode *root, vector<TreeNode> &vec, int cur, int aim)

{

    if (root == NULL)

        return;

    vec.push_back(*root);

    cur += root->val;

    bool IsLeft = ((root->left == NULL) && (root->right == NULL));

    if (cur == aim && IsLeft)

    {

        for (vector<TreeNode>::iterator beg = vec.begin(); beg != vec.end(); ++beg)

            cout << beg->val << " ";

        cout << endl;

    }

    if (root->left != NULL)

        FindPath(root->left, vec, cur, aim);

    if (root->right != NULL)

        FindPath(root->right, vec, cur, aim);

    vec.pop_back();

}

void FindPath(TreeNode *root, int aim)

{

    if (root == NULL)

        return;

    vector<TreeNode> vec;

    FindPath(root, vec, 0, aim);

}

测试

编程思路总结——递归
#include <iostream>

#include <vector>

using namespace std;

struct TreeNode 

{

    int val;

    TreeNode *left;

    TreeNode *right;

    TreeNode(int v) : val(v), left(NULL), right(NULL) {};

};



void FindPath(TreeNode *root, vector<TreeNode> &vec, int cur, int aim)

{

    if (root == NULL)

        return;

    vec.push_back(*root);

    cur += root->val;

    bool IsLeft = ((root->left == NULL) && (root->right == NULL));

    if (cur == aim && IsLeft)

    {

        for (vector<TreeNode>::iterator beg = vec.begin(); beg != vec.end(); ++beg)

            cout << beg->val << " ";

        cout << endl;

    }

    if (root->left != NULL)

        FindPath(root->left, vec, cur, aim);

    if (root->right != NULL)

        FindPath(root->right, vec, cur, aim);

    vec.pop_back();

}

void FindPath(TreeNode *root, int aim)

{

    if (root == NULL)

        return;

    vector<TreeNode> vec;

    FindPath(root, vec, 0, aim);

}



int main()

{

    TreeNode *root = new TreeNode(10);

    TreeNode *p1 = new TreeNode(5);

    TreeNode *p2 = new TreeNode(12);

    TreeNode *p3 = new TreeNode(4);

    TreeNode *p4 = new TreeNode(7);

    root->left = p1;

    root->right = p2;

    p1->left = p3;

    p1->right = p4;

    FindPath(root, 22);

}
View Code

 

你可能感兴趣的:(编程)