我是靠谱客的博主 有魅力狗,最近开发中收集的这篇文章主要介绍【二叉树】路径总和(含路径)一、题目二、DFS+回溯三、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、题目

力扣原题:https://leetcode-cn.com/problems/path-sum-ii/

【二叉树】路径总和:https://blog.csdn.net/sinat_34596644/article/details/106109952

二、DFS+回溯

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {

    private int target;

    private List<List<Integer>> result;

    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        if (null == root) {
            return new ArrayList<>();
        }

        this.target = sum;
        this.result = new ArrayList<>();
        dfs(root, 0, new ArrayList<Integer>());
        return this.result;
    }

    private void dfs(TreeNode root, int cur, List<Integer> record) {
        if (null == root) {
            return;
        }

        // 记录当前状态
        cur = cur + root.val;
        record.add(root.val);

        // 1、当前路径和 = 目标路径和
        // 2、当前节点为叶子节点
        if (cur == this.target && null == root.left && null == root.right) {
            List<Integer> subResult = new ArrayList<>(record);
            this.result.add(subResult);
            return;
        }

        // 递归左子树
        if (null != root.left) {
            dfs(root.left, cur, record);
            record.remove(record.size() - 1);
        }

        // 递归右子树
        if (null != root.right) {
            dfs(root.right, cur, record);
            record.remove(record.size() - 1);
        }
    }
}
  • 基本思路:相比于不记录路径的路径总和,需要多一个List保存结果。
  • 时间复杂度:O(n)。DFS深度优先遍历,每个节点访问一次。
  • 空间复杂度:O(log(n))。最坏情况是二叉树退化为链表,此时时间复杂度为O(n),最好情况是最小的树深度O(log(n))。

三、总结

  • 由于JAVA的引用传递,当找到目标节点时,需要基于当前的记录重新构造一个List,即List<Integer> subResult = new ArrayList<>(record);;
  • 当DFS回溯到上一层时,需要将路径回退一格;

最后

以上就是有魅力狗为你收集整理的【二叉树】路径总和(含路径)一、题目二、DFS+回溯三、总结的全部内容,希望文章能够帮你解决【二叉树】路径总和(含路径)一、题目二、DFS+回溯三、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部