iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
Software Development

Kotlin 程式人:Leetcode 意外旅程系列 第 14

Day 14:再探樹狀結構:101. Symmetric Tree、965. Univalued Binary Tree

  • 分享至 

  • xImage
  •  

「上次的樹狀結構,兩位還學的順利嗎?」

「還可以吧⋯⋯不過只有一個題目,好像看不出熟不熟悉?」

「說得很對!那我們再來寫幾題吧!」夏天欣慰的說

965. Univalued Binary Tree

「這感覺跟之前的 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)
        }
    }
}

「兩位越學習越厲害了!今天我們就先這樣!」夏天開心的拿了一盤甜食過來,有黑森林蛋糕、蜂蜜鬆餅、肉桂捲⋯⋯。三人剛好也都餓了,開始大快朵頤起來。


上一篇
Day 13:樹狀結構的第一題:100. Same Tree
下一篇
Day 15:太小看字串會有意外的喔!10、20、657
系列文
Kotlin 程式人:Leetcode 意外旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言