zoukankan      html  css  js  c++  java
  • 113. 路径总和 II

    113. 路径总和 II

    题目链接:113. 路径总和 II(中等)

    给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

    叶子节点 是指没有子节点的节点。

    示例 1:

    输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
    输出:[[5,4,11,2],[5,8,4,5]]

    示例 2:

    输入:root = [1,2,3], targetSum = 5
    输出:[]

    示例 3:

    输入:root = [1,2], targetSum = 0
    输出:[]

    解题思路

    该题与112. 路径总和 类似,不一样的是该题需要遍历完所有的路径。

    递归法

    代码(C++)

    //递归
    class Solution {
    public:
        void traversal(TreeNode* node, vector<int>& path, vector<vector<int>>& result, int count) {
            if(!node->left && !node->right) {
                if (count == 0) result.push_back(path);
                return;
            }
            if (node->left) {
                path.push_back(node->left->val);
                count -= node->left->val;
                traversal(node->left, path, result, count); //递归
                count += node->left->val; //回溯
                path.pop_back(); //回溯
            }
            if (node->right) {
                path.push_back(node->right->val);
                count -= node->right->val;
                traversal(node->right, path, result, count); //递归
                count += node->right->val; //回溯
                path.pop_back(); //回溯
            }
        }
        vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
            vector<vector<int>> result;
            if (root == nullptr) return result;
            vector<int> path;
            path.push_back(root->val);
            traversal(root, path, result, targetSum - root->val);
            return result;
        }
    };

    代码(JavaScript)

    /**
     * @param {TreeNode} root
     * @param {number} targetSum
     * @return {number[][]}
     */
    function traversal(node, path, result, count) {
        if (!node.left && !node.right) {
            if (count === 0) result.push([...path]); // 不能写result.push(path), 要深拷贝
            return;
        }
    ​
        if (node.left) {
            path.push(node.left.val);
            count -= node.left.val;
            traversal(node.left, path, result, count); //递归
            count += node.left.val; //回溯
            path.pop(); //回溯
        }
        if (node.right) {
            path.push(node.right.val);
            count -= node.right.val;
            traversal(node.right, path, result, count); //递归
            count += node.right.val; //回溯
            path.pop(); //回溯
        }
        return false;
    }
    ​
    var pathSum = function(root, targetSum) {
        let result = [];
        if (root === null) return result;
        let path = [];
        path.push(root.val);
        traversal(root, path, result, targetSum - root.val);
        return result;
    };
  • 相关阅读:
    文件夹无法删除解决方案
    常用Web Service汇总(天气预报、时刻表等)
    浏览器兼容手册
    如何在word2007下右键添加“新建Word 2003 文档”
    Centos7上实现不同网段的服务器文件共享
    ubuntu安装界面 会出现不完整情况
    Centos7搭建dhcp服务器
    Centos7上搭建ftp服务器
    Centos7上配置网络和本地yum方法
    浅谈网络流
  • 原文地址:https://www.cnblogs.com/wltree/p/15669547.html
Copyright © 2011-2022 走看看