[Day24]-[二叉树] 相同数
作者:方勇(gopher)
- 2022 年 4 月 24 日
本文字数:1021 字
阅读完需:约 3 分钟
100. 相同的树
给你两棵二叉树的根节点 p
和 q
,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:p = [1,2,3], q = [1,2,3]
输出:true
复制代码
示例 2:
输入:p = [1,2], q = [1,null,2]
输出:false
复制代码
示例 3:
输入:p = [1,2,1], q = [1,1,2]
输出:false
复制代码
题解:
深度搜索 DFS
func TestIsSameTree(t *testing.T) {
p := &TreeNode{
Val: 1,
Left: &TreeNode{
Val: 2,
},
Right: &TreeNode{
Val: 3,
},
}
q := &TreeNode{
Val: 1,
Left: &TreeNode{
Val: 2,
},
Right: &TreeNode{
Val: 3,
},
}
var isSameTree func(p *TreeNode, q *TreeNode) bool
isSameTree = func(p, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
if p == nil || q == nil {
return false
}
if q.Val != p.Val {
return false
}
// 遍历左侧p.Left = 2,q.Left =2
// p.Left=nil,q.Left=nil
// p.Right=nil,q.Right=nil
// p.Right = 3, q.Right=3 // 开始回溯到上个节点
// p.Left = nil,q.Left=nil
// p.Right=nil,q.Right=nil
return isSameTree(p.Left, q.Left) && isSameTree(q.Right, p.Right)
}
t.Log(isSameTree(p, q))
}
复制代码
广度搜索 BFS
func TestIsSameTree2(t *testing.T) {
p := &TreeNode{
Val: 1,
Left: &TreeNode{
Val: 2,
},
Right: &TreeNode{
Val: 3,
},
}
q := &TreeNode{
Val: 1,
Left: &TreeNode{
Val: 2,
},
Right: &TreeNode{
Val: 3,
},
}
var isSameTree func(p *TreeNode, q *TreeNode) bool
isSameTree = func(p, q *TreeNode) bool {
if p == nil && q == nil {
return true
}
if p == nil || q == nil {
return false
}
queue := []*TreeNode{}
queue = append(queue, p, q) // 先把p,q root放进去
for len(queue) > 0 {
node1, node2 := queue[0], queue[1] // 每次取两个
queue = queue[2:] // 裁剪
if node1 == nil && node2 == nil { // 都为空 continue
continue
}
if node1 == nil || node2 == nil || node1.Val != node2.Val { // 不相同
return false
}
queue = append(queue, node1.Left, node2.Left, node1.Right, node2.Right) // 将左右节点放到queue中
}
return true
}
t.Log(isSameTree(p, q))
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论