/** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNode left; * public TreeNode right; * public TreeNode(int x) { val = x; } * } */ public class Solution { Stack<TreeNode> S = new Stack<TreeNode>(); List<List<TreeNode>> list = new List<List<TreeNode>>(); private void postNode(TreeNode node) { if (node != null) { S.Push(node); if (node.left != null) { postNode(node.left); } if (node.right != null) { postNode(node.right); } if (node.left == null && node.right == null) { list.Add(S.ToList()); } S.Pop(); } } public bool HasPathSum(TreeNode root, int sum) { postNode(root); foreach (var l in list) { var psum = 0; foreach (var d in l) { psum += d.val; } if (psum == sum) { return true; } } return false; } }
https://leetcode.com/problems/path-sum/#/description
补充一个python的实现:
1 class Solution: 2 def hasPathSum(self, root: TreeNode, sum: int) -> bool: 3 if root == None: 4 return False 5 if root.left == None and root.right == None and root.val == sum: 6 return True 7 return self.hasPathSum(root.left,sum-root.val) or self.hasPathSum(root.right,sum-root.val)
java版本实现:
1 class Solution { 2 public boolean hasPathSum(TreeNode root, int targetSum) { 3 if(root == null){ 4 return false; 5 } 6 if(root.left == null && root.right == null && root.val == targetSum){ 7 return true; 8 }else{ 9 return hasPathSum(root.left,targetSum-root.val) || hasPathSum(root.right,targetSum-root.val); 10 } 11 } 12 }