Skip to content

Commit 24e2bf1

Browse files
committed
543_Diameter_of_Binary_Tree and 572_Subtree_of_Another_Tree
1 parent 041ab92 commit 24e2bf1

File tree

5 files changed

+122
-0
lines changed

5 files changed

+122
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ Remember solutions are only solutions to given problems. If you want full study
132132
| 443 | [String Compression](https://leetcode.com/problems/string-compression/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/443_String_Compression.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/443_String_Compression.java) | Maintain curr, read, write and anchor (start of this char). |
133133
| 453 | [Number of Segments in a String](https://leetcode.com/problems/minimum-moves-to-equal-array-elements/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/453_Minimum_Moves_to_Equal_Array_Elements.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/453_Minimum_Moves_to_Equal_Array_Elements.java) | Each move is equal to minus one element in array, so the answer is the sum of all elements after minus min. |
134134
| 463 | [Island Perimeter](https://leetcode.com/problems/island-perimeter/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/463_Island_Perimeter.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/463_Island_Perimeter.java) | math, find the area, actual number, then find the digit |
135+
| 538 | [Convert BST to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/538_Convert_BST_to_Greater_Tree.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/538_Convert_BST_to_Greater_Tree.java) | Right first DFS with a variable recording sum of node.val and right.val. 1. Recursive.<br>2. Stack 3. Reverse Morris In-order Traversal |
136+
| 543 | [Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/543_Diameter_of_Binary_Tree.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/543_Diameter_of_Binary_Tree.java) | DFS with O(1) for max answer |
137+
| 572 | [Subtree of Another Tree](https://leetcode.com/problems/subtree-of-another-tree/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/572_Subtree_of_Another_Tree.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/572_Subtree_of_Another_Tree.java) | 1. Tree traverse and compare<br>2. Tree to string and compare |
138+
| 617 | [Merge Two Binary Trees](https://leetcode.com/problems/merge-two-binary-trees/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/617_Merge_Two_Binary_Trees.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/617_Merge_Two_Binary_Trees.java) | Traverse both trees Recursion & Iterative (stack) |
135139
| 771 | [Jewels and Stones](https://leetcode.com/problems/jewels-and-stones/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/771_Jewels_and_Stones.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/771_Jewels_and_Stones.java) | Count given char in string. Hash or table. [Oneline](https://leetcode.com/problems/jewels-and-stones/discuss/113574/1-liners-PythonJavaRuby) |
136140
| 804 | [Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/description/) | [Python](https://github.com/qiyuangong/leetcode/blob/master/python/771_Jewels_and_Stones.py) [Java](https://github.com/qiyuangong/leetcode/blob/master/java/771_Jewels_and_Stones.java) | String, Hash and Set. Set is recommended. |
137141

java/543_Diameter_of_Binary_Tree.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
// https://leetcode.com/problems/diameter-of-binary-tree/solution/
3+
int ans;
4+
public int diameterOfBinaryTree(TreeNode root) {
5+
ans = 1;
6+
depth(root);
7+
return ans - 1;
8+
}
9+
public int depth(TreeNode node) {
10+
if (node == null) return 0;
11+
int L = depth(node.left);
12+
int R = depth(node.right);
13+
ans = Math.max(ans, L+R+1);
14+
return Math.max(L, R) + 1;
15+
}
16+
}

java/572_Subtree_of_Another_Tree.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
public class Solution {
11+
// https://leetcode.com/problems/subtree-of-another-tree/solution/
12+
HashSet < String > trees = new HashSet < > ();
13+
public boolean isSubtree(TreeNode s, TreeNode t) {
14+
String tree1 = preorder(s, true);
15+
String tree2 = preorder(t, true);
16+
return tree1.indexOf(tree2) >= 0;
17+
}
18+
public String preorder(TreeNode t, boolean left) {
19+
if (t == null) {
20+
if (left)
21+
return "lnull";
22+
else
23+
return "rnull";
24+
}
25+
return "#"+t.val + " " +preorder(t.left, true)+" " +preorder(t.right, false);
26+
}
27+
28+
// public boolean isSubtree(TreeNode s, TreeNode t) {
29+
// return traverse(s,t);
30+
// }
31+
// public boolean equals(TreeNode x,TreeNode y)
32+
// {
33+
// if(x==null && y==null)
34+
// return true;
35+
// if(x==null || y==null)
36+
// return false;
37+
// return x.val==y.val && equals(x.left,y.left) && equals(x.right,y.right);
38+
// }
39+
// public boolean traverse(TreeNode s,TreeNode t)
40+
// {
41+
// return s!=null && ( equals(s,t) || traverse(s.left,t) || traverse(s.right,t));
42+
// }
43+
}

python/543_Diameter_of_Binary_Tree.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution(object):
9+
# https://leetcode.com/problems/diameter-of-binary-tree/solution/
10+
def diameterOfBinaryTree(self, root):
11+
self.ans = 1
12+
def depth(node):
13+
if not node: return 0
14+
L = depth(node.left)
15+
R = depth(node.right)
16+
self.ans = max(self.ans, L+R+1)
17+
return max(L, R) + 1
18+
19+
depth(root)
20+
return self.ans - 1

python/572_Subtree_of_Another_Tree.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode(object):
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution(object):
9+
# https://leetcode.com/problems/subtree-of-another-tree/solution/
10+
def isSubtree(self, s, t):
11+
"""
12+
:type s: TreeNode
13+
:type t: TreeNode
14+
:rtype: bool
15+
"""
16+
s_res = self.preorder(s, True)
17+
t_res = self.preorder(t, True)
18+
return t_res in s_res
19+
20+
def preorder(self, root, isLeft):
21+
if root is None:
22+
if isLeft:
23+
return "lnull"
24+
else:
25+
return "rnull"
26+
return "#" + str(root.val) + " " + self.preorder(root.left, True) + " " + self.preorder(root.right, False)
27+
28+
# def isSubtree(self, s, t):
29+
# return self.traverse(s, t)
30+
31+
# def equals(self, x, y):
32+
# if x is None and y is None:
33+
# return True
34+
# if x is None or y is None:
35+
# return False
36+
# return x.val == y.val and self.equals(x.left, y.left) and self.equals(x.right, y.right)
37+
38+
# def traverse(self, s, t):
39+
# return s is not None and (self.equals(s, t) or self.traverse(s.left, t) or self.traverse(s.right, t))

0 commit comments

Comments
 (0)