LeetCode 112 Path Sum

来源:互联网 发布:tensorflow spark 编辑:程序博客网 时间:2024/05/18 06:19
  • 题目要求
   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
  • 解题思路: 该题是求从根节点到叶子节点的值的和,找出等于目标值的。很自然的想到用前序遍历的思路,一个变量存放着路径过程中的和,在叶子节点判断一下是否等于目标值,此算法用到递归,递归的实质是使用了一个系统栈,最后结果是先进后出,把当前节点出栈时,减去当前值也就相当于去掉当前节点的值了。

以下是系统栈存放节点的示意图,当某个节点没有左右子树时就会出栈,直到遇到没有访问的左子树或右子树时,又会发生入栈。
这里写图片描述

 public boolean hasPathSum(TreeNode root, int sum) {        return search(root,sum);    }    int nums=0;    boolean flag=false;    public boolean search(TreeNode root, int sum){        if(root!=null){            nums+=root.val;            if(root.left==null&&(root.right==null)){                if(nums==sum){                    return true;                }            }            flag=search(root.left,sum);            flag=search(root.right,sum);            System.out.println("root.val "+root.val+"  nums: "+nums+" flag: "+flag);            nums-=root.val;//从栈里弹出时,表示当前值已经遍历了,减去当前值。        }        return flag;    }
0 0