「上次的樹狀結構,兩位還學的順利嗎?」
「還可以吧⋯⋯不過只有一個題目,好像看不出熟不熟悉?」
「說得很對!那我們再來寫幾題吧!」夏天欣慰的說
「這感覺跟之前的 Same Tree 很像!」兩人參考著慢慢寫出解答
class Solution {
fun isUnivalTree(root: TreeNode?): Boolean = when {
root == null -> true
root.left != null && root.`val` != root.left.`val` -> false
root.right != null && root.`val` != root.right.`val` -> false
else -> isUnivalTree(root.left) && isUnivalTree(root.right)
}
}
「我想,這樣寫也可以喔!」菁菁換個寫法
class Solution {
fun isUnivalTree(root: TreeNode?): Boolean = (root == null)
|| (root.left == null || root.`val` == root.left.`val`)
&& (root.right == null || root.`val` == root.right.`val`)
&& isUnivalTree(root.left) && isUnivalTree(root.right)
}
「兩位都進步好多!」夏天又開了一題 101. Symmetric Tree
「這題目比較難一點點」兩人想了一陣子,似乎有點卡住。
「如果是對稱的話,遞迴下去的邏輯,左邊 node 的左側和右邊 node 的右側,應該是一樣的。所以⋯⋯」
「左邊 node 的右側和右邊 node 的左側,也應該要是一樣的!」兩人同時說到。很快的,兩人就寫出了解答。
class Solution {
fun isSymmetric(root: TreeNode?): Boolean {
return when {
root == null -> true
else -> isSubtreeSymmetric(root.left, root.right)
}
}
private fun isSubtreeSymmetric(left: TreeNode?, right: TreeNode?): Boolean {
return when {
left == null && right == null -> true
left?.`val` != right?.`val` -> false
else -> isSubtreeSymmetric(left?.left, right?.right) && isSubtreeSymmetric(left?.right, right?.left)
}
}
}
「兩位越學習越厲害了!今天我們就先這樣!」夏天開心的拿了一盤甜食過來,有黑森林蛋糕、蜂蜜鬆餅、肉桂捲⋯⋯。三人剛好也都餓了,開始大快朵頤起來。