使用 Go 解決 LeetCode 問題:100. Same Tree

Description

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:
1
2
3
4
5
6
7
Input:     1         1
/ \ / \
2 3 2 3

[1,2,3], [1,2,3]

Output: true
  • Example 2:
1
2
3
4
5
6
7
Input:     1         1
/ \
2 2

[1,2], [1,null,2]

Output: false
  • Example 3:
1
2
3
4
5
6
7
Input:     1         1
/ \ / \
2 1 1 2

[1,2,1], [1,1,2]

Output: false

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// TreeNode struct
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)
}

Note

假設有以下參數:

1
2
p: [1, 2, 3]
q: [1, 2, 3]

說明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
一開始,判斷 p 的左節點和 q 的左節點是否相同,以及 p 的右節點和 q 的右節點是否相同,等待返回。

------------------------------
1(p) 1(q)
/ \ / \
2(a) 3(b) 2(c) 3(d)
------------------------------

左節點開始遞迴:

判斷 a 的左節點和 c 的左節點是否相同,由於同時為空,返回 true
判斷 a 的右節點和 c 的右節點是否相同,由於同時為空,返回 true

左節點的遞迴返回 true

右節點開始遞迴:

判斷 b 的左節點和 d 的左節點是否相同,由於同時為空,返回 true
判斷 b 的右節點和 d 的右節點是否相同,由於同時為空,返回 true

右節點的遞迴返回 true

最終返回:true

Code