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
  • 相关阅读:
    第3.2 使用案例1:股票期货stock portfolio 21050917
    颜色代码表#FFFFFF #FF0000 #00FF00 #FF00FF (2015-07-21 10:39)转载
    JSTL(1.1)的配置
    Ext JS 4 老特征:statics 静态的变量和方法
    Ext JS 4 新特性2:配置项属性(config)之二
    Ext JS 4 新特性2:配置项属性(config)之一
    JS 4 新特性:混合属性(mixins)之二
    JS 4 新特性:混合属性(mixins)
    校验LocalDate格式
    java 执行js的eval方法
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/4166075.html
Copyright © 2011-2022 走看看