diff --git a/371-Sum-of-Two-Integers.java b/371-Sum-of-Two-Integers.java index ff641469f..9e92f51b3 100644 --- a/371-Sum-of-Two-Integers.java +++ b/371-Sum-of-Two-Integers.java @@ -7,4 +7,4 @@ public int getSum(int a, int b) { } return a; } -} +} \ No newline at end of file diff --git a/java/100-Same-Tree.java b/java/100-Same-Tree.java new file mode 100644 index 000000000..851486e05 --- /dev/null +++ b/java/100-Same-Tree.java @@ -0,0 +1,40 @@ +package java; + +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public boolean isSameTree(TreeNode p, TreeNode q) { + return dfs(p, q); + } + + private boolean dfs(TreeNode p, TreeNode q) { + if (p == null && q == null) { + return true; + } + + if (p == null || q == null) { + return false; + } + + if (p.val != q.val) return false; + + boolean left = dfs(p.left, q.left); + boolean right = dfs(p.right, q.right); + + return left && right; + } +} + diff --git a/java/124-Binary-Tree-Maximum-Path-Sum.java b/java/124-Binary-Tree-Maximum-Path-Sum.java new file mode 100644 index 000000000..22d94a98f --- /dev/null +++ b/java/124-Binary-Tree-Maximum-Path-Sum.java @@ -0,0 +1,43 @@ +package java; + +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + + int[] res = new int[1]; + + public int maxPathSum(TreeNode root) { + res[0] = root.val; + dfs(root); + return res[0]; + } + + private int dfs(TreeNode node) { + if (node == null) return 0; + + int leftMax = dfs(node.left); + int rightMax = dfs(node.right); + + leftMax = Math.max(leftMax, 0); + rightMax = Math.max(rightMax, 0); + + int allMax = leftMax + rightMax + node.val; + res[0] = Math.max(res[0], allMax); + + + return node.val + Math.max(leftMax, rightMax); + } +} \ No newline at end of file diff --git a/java/21-Merge-Two-Sorted-Lists.java b/java/21-Merge-Two-Sorted-Lists.java index 3dc9aadbe..a8d94b564 100644 --- a/java/21-Merge-Two-Sorted-Lists.java +++ b/java/21-Merge-Two-Sorted-Lists.java @@ -1,3 +1,5 @@ +package java; + /** * Definition for singly-linked list. * public class ListNode {