Path Sum

来源:互联网 发布:淘宝登录 编辑:程序博客网 时间:2024/06/06 07:38

题目地址:https://leetcode.com/problems/path-sum/

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

For example:
Given the below binary tree and sum = 22,

              5             / \            4   8           /   / \          11  13  4         /  \      \        7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

这类型题目一般用递归写还是比较简单的,边界条件就是当前节点为叶子节点,如果当前节点的val与递归的当前sum一样大了,那么就是说这个树存在和等于sum的路径。

public class PathSum {    public boolean hasPathSum(TreeNode root, int sum) {        if (root == null)            return false;        if (root.left == null && root.right == null && root.val == sum)            return true;        return  hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);    }    public static void main(String[] args) {        TreeNode node1 = new TreeNode(5);        TreeNode node2 = new TreeNode(4);        TreeNode node3 = new TreeNode(8);        TreeNode node4 = new TreeNode(11);        TreeNode node5 = new TreeNode(13);        TreeNode node6 = new TreeNode(4);        TreeNode node7 = new TreeNode(7);        TreeNode node8 = new TreeNode(2);        TreeNode node9 = new TreeNode(1);        node1.left = node2;        node1.right =node3;        node2.left = node4;        node3.left = node5;        node3.right = node6;        node4.left = node7;        node4.right = node8;        node6.right = node9;        PathSum pathSum = new PathSum();        System.out.println(pathSum.hasPathSum(node1, 22));    }}

该算法的时间复杂度与树的形状有关,最差的情况就是退化树,最好当然就是平衡树了。

0 0
原创粉丝点击