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;
        }
    };
    

      

  • 相关阅读:
    软工实践结对作业第二次
    团队展示
    软件工程结对作业
    软工实践第二次作业
    栈的初步学习
    课程作业四
    作业
    课程作业2
    博客汇总目录
    Mybatis-plus学习笔记,基于springboot
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10659487.html
Copyright © 2011-2022 走看看