Recca Chao 的 gitHub page

推廣網站開發,包含 Laravel 和 Kotlin 後端撰寫、自動化測試、讀書心得等。Taiwan Kotlin User Group 管理員。

View on GitHub

Kotlin Leetcode - 110. Balanced Binary 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 isBalanced(root: TreeNode?): Boolean {
        
    }
}

解題思路

這一題考的是對樹的處理

我們只要對樹的高度進行計算

就可以比較出這棵樹是不是符合 height-balanced 的條件

height-balanced 的條件有三個:

要計算樹的高度,可以使用遞迴:

Kotlin 參考解答

/**
 * 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 isBalanced(root: TreeNode?): Boolean = when {
        root == null -> true
        else -> Math.abs( depth(root.right) - depth(root.left) ) <= 1
             && isBalanced(root.left)
             && isBalanced(root.right)
    }

    fun depth(root: TreeNode?): Int = when {
        root == null -> 0
        else -> maxOf(depth(root.right), depth(root.left)) + 1
    }
}