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
  • 相关阅读:
    移动端尺寸基础知识
    em与px换算
    ECharts是中国的,也是世界的。
    Sublime Text 使用介绍、全套快捷键及插件推荐
    HTML5 新属性placeholder 兼容ie
    链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别
    关于文字内容溢出用点点点(...)省略号表示
    Hello World!
    C# 在类中使用session
    SQL Server2008函数大全
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/4166075.html
Copyright © 2011-2022 走看看