zoukankan      html  css  js  c++  java
  • 编程思路总结——递归

    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
  • 相关阅读:
    vuerouter-2.路由跳转
    vuerouter-1.路由基础
    vuebase-11._跨域处理
    vuebase-10_Axios配置
    vuebase--9._axios post请求
    vuebase--8._axios
    vuebase-7.过滤器
    vuebase-6.自定义指令
    vuebase-5.过渡和动画
    vuebase---4.实例生命周期
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/4166075.html
Copyright © 2011-2022 走看看