Kotlin Leetcode - 100. Same Tree
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
class Solution {
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
}
}
解題思路
這一題考的是樹的基本操作
只要用到樹狀結構,很常會使用到遞迴
這邊的遞迴思路如下
- 如果 p 和 q 同樣為 null,回傳 true
- 如果 p 和 q 只有一邊為 null,回傳 false
- 如果 p 和 q 兩邊均不為 null,但是 val 不同,回傳 false
- 如果通過以上條件,則往下比較子樹
一樣是遞迴,我們可以用 if 邏輯撰寫
也可以用 when 邏輯統整成單一表達式
Kotlin 參考解答
點擊展開解答
if 的寫法
class Solution {
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
return if (p == null && q == null) {
true
} else if ((p == null) || (q == null)) {
false
} else if (p!!.`val` != q!!.`val`) {
false
} else {
isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}
}
}
用 when
單一表達式內完成的方式如下
class Solution {
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
return when {
p == null && q == null -> true
p == null -> false
q == null -> false
p!!.`val` != q!!.`val` -> false
else -> isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}
}
}
回到 leetcode 列表