输入两颗二叉树A,B,判断B是不是A的子结构。
思路:
检索当前树是否存在相似的值,如存在继续检查节点的分支。
package main
import "fmt"
type TreeNode struct {
Val int
Left *TreeNode
RIght *TreeNode
}
func FindSubTree(p, c *TreeNode) bool {
if p == nil {return false}
if c == nil {return true}
if p.Val == c.Val {
if HasSub(p, c) {
return true
}
}
return FindSubTree(p.Left, c) || FindSubTree(p.RIght, c)
}
func HasSub(p, c *TreeNode) bool {
if c == nil {return true}
if p == nil {return true}
if p.Val != c.Val {
return true
}
return HasSub(p.RIght, c.RIght) && HasSub(p.Left, c.Left)
}
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def TreeHasNode(self, pRoot1, pRoot2):
if pRoot2 == None:
return True
elif pRoot1 == None:
return False
elif pRoot1.val == pRoot2.val:
return HasNode(pRoot1, pRoot2)
return TreeHasNode(pRoot1.left, pRoot2) or TreeHasNode(pRoot1.right, pRoot2)
def HasNode(self, pRoot1, pRoot2):
if pRoot2 == None:
return True
elif pRoot1 == None:
return False
elif pRoot1.val != pRoot2.val:
return True
return HasNode(pRoot1.left, pRoot2) and HasNode(pRoot2.right, pRoot2)
```
网友评论