Given two binary trees, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
Example 1:
Input: 1 1
/ \ /
2 3 2 3
[1,2,3], [1,2,3]
Output: true
Example 2:
Input: 1 1
/
2 2
[1,2], [1,null,2]
Output: false
Example 3:
Input: 1 1
/ \ /
2 1 1 2
[1,2,1], [1,1,2]
Output: false
Idea of solving problems
We can use an iterative approach to search.The equality is based on the fact that the left nodes of the tree are equal to the left nodes and the right nodes are equal to each other.Iterations use breadth search, or layer search, using queues as the data structure. The time complexity is O(n), and the space complexity is O(n). The memory consumption is 2.1Mb.
Code
/**
* Definition for a binary tree node.
* 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||p==nil&&q!=nil||p.Val!=q.Val{
return false
}
queue :=make([]*TreeNode,0)
queue = append(queue,p)
queue = append(queue,q)
for len(queue)>0{
pNode :=queue[0]
qNode :=queue[1]
if pNode.Val!=qNode.Val{
return false
}
if pNode.Left!=nil&&qNode.Left!=nil {
queue = append(queue,pNode.Left)
queue = append(queue,qNode.Left)
} else if pNode.Left==nil&&qNode.Left!=nil {
return false
}else if pNode.Left!=nil&&qNode.Left==nil {
return false
}
if pNode.Right!=nil&&qNode.Right!=nil {
queue = append(queue,pNode.Right)
queue = append(queue,qNode.Right)
}else if pNode.Right==nil&&qNode.Right!=nil {
return false
}else if pNode.Right!=nil&&qNode.Right==nil {
return false
}
queue =queue[2:]
}
return true
}
链接:https://leetcode-cn.com/problems/same-tree/solution/go-di-gui-he-die-dai-by-ba-xiang/
来源:力扣(LeetCode)