Skip to content

Commit fefd4e2

Browse files
committed
solve problem Subtree Of Another Tree
1 parent ddc1d5c commit fefd4e2

File tree

5 files changed

+112
-0
lines changed

5 files changed

+112
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ All solutions will be accepted!
132132
|67|[Add Binary](https://leetcode-cn.com/problems/add-binary/description/)|[java/py/js](./algorithms/AddBinary)|Easy|
133133
|504|[Base 7](https://leetcode-cn.com/problems/base-7/description/)|[java/py/js](./algorithms/Base7)|Easy|
134134
|830|[Positions Of Large Groups](https://leetcode-cn.com/problems/positions-of-large-groups/description/)|[java/py/js](./algorithms/PositionsOfLargeGroups)|Easy|
135+
|572|[Subtree Of Another Tree](https://leetcode-cn.com/problems/subtree-of-another-tree/description/)|[java/py/js](./algorithms/Subtree Of Another Tree)|Easy|
135136

136137
# Database
137138
|#|Title|Solution|Difficulty|
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Subtree Of Another Tree
2+
This problem is easy to solve by recursive
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
class Solution {
11+
public boolean isSubtree(TreeNode s, TreeNode t) {
12+
if (s == null && t == null) {
13+
return true;
14+
} else if ((s == null && t != null) || (s != null && t == null)) {
15+
return false;
16+
} else if (isSameTree(s, t)) {
17+
return true;
18+
} else {
19+
return isSubtree(s.left, t) || isSubtree(s.right, t);
20+
}
21+
}
22+
23+
public boolean isSameTree(TreeNode s, TreeNode t) {
24+
if (s.val == t.val) {
25+
if (s.left == null && s.right == null && t.left == null && t.right == null) {
26+
return true;
27+
} else if (s.left != null && s.right != null && t.left != null && t.right != null) {
28+
return isSameTree(s.left, t.left) && isSameTree(s.right, t.right);
29+
} else if (s.left != null && s.right == null && t.left != null && t.right == null) {
30+
return isSameTree(s.left, t.left);
31+
} else if (s.left == null && s.right != null && t.left == null && t.right != null) {
32+
return isSameTree(s.right, t.right);
33+
}
34+
}
35+
return false;
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
/**
9+
* @param {TreeNode} s
10+
* @param {TreeNode} t
11+
* @return {boolean}
12+
*/
13+
var isSubtree = function(s, t) {
14+
if (s === null && t === null) {
15+
return true
16+
} else if ((s === null && t !== null) || (s !== null && t === null)) {
17+
return false
18+
} else if (isSameTree(s, t)) {
19+
return true
20+
} else {
21+
return isSubtree(s.left, t) || isSubtree(s.right, t)
22+
}
23+
};
24+
25+
var isSameTree = function(s, t) {
26+
if (s.val === t.val) {
27+
if (s.left === null && s.right === null && t.left === null && t.right === null) {
28+
return true
29+
} else if (s.left !== null && s.right !== null && t.left !== null && t.right !== null) {
30+
return isSameTree(s.left, t.left) && isSameTree(s.right, t.right)
31+
} else if (s.left !== null && s.right === null && t.left !== null && t.right === null) {
32+
return isSameTree(s.left, t.left)
33+
} else if (s.left === null && s.right !== null && t.left === null && t.right !== null) {
34+
return isSameTree(s.right, t.right)
35+
}
36+
}
37+
return false
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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+
def isSubtree(self, s, t):
10+
"""
11+
:type s: TreeNode
12+
:type t: TreeNode
13+
:rtype: bool
14+
"""
15+
if not s and not t:
16+
return True
17+
elif (not s and t) or (s and not t):
18+
return False
19+
elif self.isSameTree(s, t):
20+
return True
21+
else:
22+
return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
23+
24+
def isSameTree(self, s, t):
25+
if s.val == t.val:
26+
if not s.left and not s.right and not t.left and not t.right:
27+
return True
28+
elif s.left and s.right and t.left and t.right:
29+
return self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)
30+
elif s.left and not s.right and t.left and not t.right:
31+
return self.isSameTree(s.left, t.left)
32+
elif not s.left and s.right and not t.left and t.right:
33+
return self.isSameTree(s.right, t.right)
34+
return False

0 commit comments

Comments
 (0)