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

    题目描述

    输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
     
    解题思路:
    使用dfs进行判断,使用expNum记录当前剩余的值,使用vector来记录到达当前节点的路径中各个节点,在回溯的时候需要删掉最后加入的当前节点,找到一条路径的条件是节点为叶子,且剩余值等于当前节点值。还有比较坑的是,讨论区里很多答案貌似忘记了最后要求数组长度大的靠前的条件,笔者在最后又使用sort排序了一遍结果。
    bool cmp(const vector<int> &a, const vector<int> &b){
        return a.size() > b.size();
    }
    class Solution {
    public:
        vector<vector<int> >res;
        void dfs(TreeNode*root, int expNum, vector<int>vct){
            if(root == NULL) return;
            if(root->val > expNum){
                return;
            }
            if(root->left == NULL && root->right == NULL && root->val == expNum){
                //找到一条路径
                vct.push_back(root->val);
                res.push_back(vct);
                vct.pop_back();
                return;
            }
            if(root->left != NULL){
                vct.push_back(root->val);
                dfs(root->left, expNum-root->val, vct);
                vct.pop_back();
            }
            if(root->right != NULL){
                vct.push_back(root->val);
                dfs(root->right, expNum-root->val, vct);
                vct.pop_back();
            }
        }
    
        vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
            vector<int> vct;
            dfs(root, expectNumber, vct);
            sort(res.begin(), res.end(), cmp);
            return res;
        }
    };
    

      

  • 相关阅读:
    simian 查找项目中的重复代码
    idea 启动 ShardingProxy
    kafka 加密通信,python-kafka 访问加密服务器
    apt-get 修改源
    短轮询、长轮询、SSE 和 WebSocket
    前端模块化:CommonJS,AMD,CMD,ES6
    Set、Weak Set、Map、Weak Map学习笔记
    博客园应该如何运营
    Vue中Route的对象参数和常用props传参
    Dapper的新实践,Dapper.Contrib的使用与扩展
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10659487.html
Copyright © 2011-2022 走看看