給定兩個二叉樹,編寫一個函數來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認爲它們是相同的。
示例 1:
輸入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
輸出: true
示例 2:
輸入: 1 1
/ \
2 2
[1,2], [1,null,2]
輸出: false
示例 3:
輸入: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
輸出: false
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/same-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
_____________________________________________________________________________________________________
同時對兩棵樹(p,q)進行遍歷,對每個節點的情況有:
(1)p爲null,q不爲null,不相同,返回false
(2)p爲null,q爲null,相同,繼續遍歷或返回
(3)p不爲null,q不爲null,且p.val != q.val ,不相同,返回false
(4)p不爲null,q不爲null,且p.val == q.val ,相同,返回true
按照上述四種代碼實現即可,使用遞歸技巧。
代碼如下:
func isSameTree(p *TreeNode, q *TreeNode) bool {
if p == nil && q != nil {
return false
}
if p != nil && q == nil {
return false
}
if p != nil && q != nil && p.Val != q.Val {
return false
}
if p == nil && q == nil {
return true
}
l := true
r := true
l = isSameTree(p.Left,q.Left)
r = isSameTree(p.Right,q.Right)
return l && r
}