zoukankan      html  css  js  c++  java
  • 二叉树中和为某一值的路径

    题目描述

    输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
     
     
    提交链接:点击
     
     
    思路:读题,发现要求的是从根节点到叶子节点的路径结点和是否等于某一给定的整数。由此,我们很容易想到DFS深度优先搜索,沿着子树一直搜到底(这里就有递归调用DFS的过程),如果发现和等于给定整数,那么将该路径放入最后结果中,如果不等于,那么就要进行退栈的操作,也就是走其他的路径,看看是否满足条件。
     
     
    代码:
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        vector<vector<int>> result;
        vector<int> elem;
        void dfs(TreeNode* root, int expectNumber){
            elem.push_back(root->val);
            if(root->val==expectNumber && root->left==NULL && root->right==NULL){//到达了叶子节点且从根节点到叶子节点的和等于整数
                result.push_back(elem);
            }else{  //否则如果不是叶子节点,继续dfs
                if(root->left)
                    dfs(root->left, expectNumber-root->val);
                if(root->right)
                    dfs(root->right, expectNumber-root->val);
            }//如果是叶子节点,但是从根节点到叶子节点的和不等于expectNumber,则元素退栈,进行另一路径的判断
            elem.pop_back();
        }
        vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
            if(root)
                dfs(root, expectNumber);
            return result;
        }
    };
     

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    linux下配置java环境及问题
    Chrome工具使用
    Ibatis的resultMap和查询数据的对应关系
    spring mvc接收数组
    PowderDesign的使用
    Android Runtime Stats
    [原创]ASM动态修改JAVA函数之函数字节码初探
    [原创]WB Android客户端架构总结:发WB工作队列设计
    [原创]Android Studio的Instant Run(即时安装)原理分析和源码浅析
    [原创]Android系统中常用JAVA类源码浅析之HashMap
  • 原文地址:https://www.cnblogs.com/logo-88/p/9769717.html
Copyright © 2011-2022 走看看