Leetcode 112. 路径总和 java解决给定一个值判断二叉树根节点到叶子节点总和是否相等 算法
Leetcode 112. 路径总和 java解决给定一个值判断二叉树根节点到叶子节点总和是否相等 算法
leetcode 原题链接:. - 力扣(LeetCode)
1. 题目描述:
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
更多的示例就不贴了。示例用的是数组表示的,不好理解。我是用的TreeNode对象的形式。
提示:
树中节点的数目在范围 [0, 5000] 内-1000 <= Node.val <= 1000-1000 <= targetSum <= 1000
2. 前几天面试,给我出的一道题,很简单没有答出来。==!算法看到链表没有再看下去了。这几天重新复习了下二叉树,广度优先遍历,深度优先遍历,以及前序,中序,后序递归,这些都复习到,这道题基本就搞定了
3. 二叉树知识点:
a. 满二叉树:
深度为k,有2^k-1个节点的二叉树 (个人理解:节点的子元素有左子树,右子树也不能空着)
b. 完全二叉树:
完全二叉树由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树
c.上述都是不带值得二叉树,平衡二叉树 avl (Adelson-Velsky and Landis)它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,不会出现树退化成链表情况,如图:
d. 深度优先遍历中,三种遍历方式区别:
前序遍历:中 左 右
中序遍历:左 中 右
后序遍历:左 右 中
记住要点就是中的位置。
4. 这些知识点后续单开一篇记录下,知道平衡二叉树的一些逻辑,那这个题就很简单了。递归算下和是否等于给定值就行了。递归结束条件就是从根节点到叶子节点的总合同要求判断的值是否相等
package com.nami.algorithm.study.tree;
/
* 描述:
*
* @Author: lbc
* @Date: 2024-02-28 14:37
* @email: 594599620@qq.com
* @Description: keep coding
*/
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
if (root.left == null && root.right == null) {
return sum == root.val;
}
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
}