@@ -62,23 +62,18 @@ B 是 A 的子结构, 即 A 中有出现和 B 相同的结构和节点值。
62
62
63
63
class Solution :
64
64
def isSubStructure (self , A : TreeNode, B : TreeNode) -> bool :
65
- return self .sub(A, B) if B else False
66
-
67
- def sub (self , A : TreeNode, B : TreeNode) -> bool :
68
- if B is None :
69
- return True
70
- if A is None :
71
- return False
72
- if A.val == B.val:
73
- return self .same(A, B) or self .sub(A.left, B) or self .sub(A.right, B)
74
- return self .sub(A.left, B) or self .sub(A.right, B)
75
-
76
- def same (self , A : TreeNode, B : TreeNode) -> bool :
77
- if B is None :
78
- return True
79
- if A is None or A.val != B.val:
65
+ def sub (A , B ):
66
+ """ 判断从当前A节点开始,是否包含B"""
67
+ if B is None :
68
+ return True
69
+ if A is None :
70
+ return False
71
+ return A.val == B.val and sub(A.left, B.left) and sub(A.right, B.right)
72
+ if B is None or A is None :
80
73
return False
81
- return self .same(A.left, B.left) and self .same(A.right, B.right)
74
+ if A.val != B.val:
75
+ return self .isSubStructure(A.left, B) or self .isSubStructure(A.right, B)
76
+ return sub(A, B) or self .isSubStructure(A.left, B) or self .isSubStructure(A.right, B)
82
77
```
83
78
84
79
### ** Java**
@@ -95,31 +90,16 @@ class Solution:
95
90
*/
96
91
class Solution {
97
92
public boolean isSubStructure (TreeNode A , TreeNode B ) {
98
- return B == null ? false : sub(A , B );
93
+ if (B == null || A == null ) return false ;
94
+ if (A . val != B . val) return isSubStructure(A . left, B ) || isSubStructure(A . right, B );
95
+ return sub(A , B ) || isSubStructure(A . left, B ) || isSubStructure(A . right, B );
99
96
}
100
97
101
98
private boolean sub (TreeNode A , TreeNode B ) {
102
- if (B == null ) {
103
- return true ;
104
- }
105
- if (A == null ) {
106
- return false ;
107
- }
108
- if (A . val == B . val) {
109
- return isSame(A , B ) || sub(A . left, B ) || sub(A . right, B );
110
- }
111
- return sub(A . left, B ) || sub(A . right, B );
112
-
113
- }
114
-
115
- private boolean isSame (TreeNode A , TreeNode B ) {
116
- if (B == null ) {
117
- return true ;
118
- }
119
- if (A == null || A . val != B . val) {
120
- return false ;
121
- }
122
- return isSame(A . left, B . left) && isSame(A . right, B . right);
99
+ // 判断从当前A节点开始,是否包含B
100
+ if (B == null ) return true ;
101
+ if (A == null ) return false ;
102
+ return A . val == B . val && sub(A . left, B . left) && sub(A . right, B . right);
123
103
}
124
104
}
125
105
```
@@ -140,39 +120,31 @@ class Solution {
140
120
* @return {boolean}
141
121
*/
142
122
var isSubStructure = function (A , B ) {
143
- if (! B || ! A ) return false ;
144
- let res;
145
- function dfs (A , B , bool ) {
146
- if (! A || ! B ) {
147
- if (B ) {
148
- return false ;
149
- } else {
150
- return true ;
151
- }
152
- }
153
- if (A .val === B .val ) {
154
- let left = dfs (A .left , B .left , true );
155
- let right = dfs (A .right , B .right , true );
156
- if (left && right) return true ;
157
- else return false ;
158
- } else {
159
- if (bool) return false ;
160
- else {
161
- let left = dfs (A .left , B , false );
162
- let right = dfs (A .right , B , false );
163
- return left || right;
164
- }
165
- }
123
+ function sub (A , B ) {
124
+ if (! B ) return true ;
125
+ if (! A ) return false ;
126
+ return A .val == B .val && sub (A .left , B .left ) && sub (A .right , B .right );
166
127
}
167
- return dfs (A , B , false ) || false ;
128
+ if (! B || ! A ) return false ;
129
+ if (A .val != B .val )
130
+ return isSubStructure (A .left , B ) || isSubStructure (A .right , B );
131
+ return sub (A , B ) || isSubStructure (A .left , B ) || isSubStructure (A .right , B );
168
132
};
169
133
```
170
134
171
135
### ** Go**
172
136
173
137
``` go
138
+ /* *
139
+ * Definition for a binary tree node.
140
+ * type TreeNode struct {
141
+ * Val int
142
+ * Left *TreeNode
143
+ * Right *TreeNode
144
+ * }
145
+ */
174
146
func isSubStructure (A *TreeNode , B *TreeNode ) bool {
175
- // 约定空树不是任意一个树的子结构
147
+ // 约定空树不是任意一个树的子结构
176
148
if A == nil || B == nil {
177
149
return false
178
150
}
0 commit comments