|
@@ -0,0 +1,31 @@
|
|
|
+/**
|
|
|
+ * Definition for a binary tree node.
|
|
|
+ * type TreeNode struct {
|
|
|
+ * Val int
|
|
|
+ * Left *TreeNode
|
|
|
+ * Right *TreeNode
|
|
|
+ * }
|
|
|
+ */
|
|
|
+func isSubtree(s *TreeNode, t *TreeNode) bool {
|
|
|
+ return postorder(s, t)
|
|
|
+}
|
|
|
+
|
|
|
+func postorder(s *TreeNode, t *TreeNode) bool {
|
|
|
+ if s == nil {
|
|
|
+ return s == t
|
|
|
+ }
|
|
|
+ if postorder(s.Left, t) || postorder(s.Right, t) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return isSametree(s, t)
|
|
|
+}
|
|
|
+
|
|
|
+func isSametree(s *TreeNode, t *TreeNode) bool {
|
|
|
+ if s == nil || t == nil {
|
|
|
+ return s == t
|
|
|
+ }
|
|
|
+ if s.Val != t.Val {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return isSametree(s.Left, t.Left) && isSametree(s.Right, t.Right)
|
|
|
+}
|