//TreeNode .
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func isSameTree(p *TreeNode, q *TreeNode) bool {
//递归遍历比对
if p == nil && q == nil {
return true
}
if p == nil || q == nil {
return false
}
if p.Val != q.Val {
return false
}
return isSameTree(p.Left, q.Left) && isSameTree(p.Right, q.Right)
}
//迭代
func isSameTree2(p *TreeNode, q *TreeNode) bool {
queue := []*TreeNode{p, q}
for len(queue) > 0 {
p, q := queue[0], queue[1]
queue = queue[2:]
if p == nil && q == nil {
continue
}
if p == nil || q == nil {
return false
}
if p.Val != q.Val {
return false
}
queue = append(queue, p.Left, q.Left, p.Right, q.Right)
}
return true
}
func main() {
p := &TreeNode{Val: 1, Left: &TreeNode{Val: 2}, Right: &TreeNode{Val: 3}}
q := &TreeNode{Val: 1, Left: &TreeNode{Val: 2}, Right: &TreeNode{Val: 3}}
fmt.Println(isSameTree(p, q))
fmt.Println(isSameTree2(p, q))
}