leetcode刷題筆記一百一十題 平衡二叉樹
阿新 • • 發佈:2020-08-06
leetcode刷題筆記一百一十題 平衡二叉樹
源地址:110. 平衡二叉樹
問題描述:
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
示例 1:
給定二叉樹 [3,9,20,null,null,15,7]
3
/
9 20
/
15 7
返回 true 。示例 2:
給定二叉樹 [1,2,2,3,3,null,null,4,4]
1 / \ 2 2
/ \
3 3
/
4 4
返回 false 。
/** 本題可分為自頂向下或自底向上兩種思路 自頂向下的方法需要使用輔助函式計算當前結點的左右子樹的高度,然後判斷高度差是否小於2 */ /** * Definition for a binary tree node. * class TreeNode(var _value: Int) { * var value: Int = _value * var left: TreeNode = null * var right: TreeNode = null * } */ object Solution { def isBalanced(root: TreeNode): Boolean = { def helper(root: TreeNode): Int = { if (root == null) return 0 else return 1 + Math.max(helper(root.left), helper(root.right)) } if (root == null) return true if (Math.abs(helper(root.left) - helper(root.right)) < 2) return isBalanced(root.left) && isBalanced(root.right) return false } } /** 由於自頂向下的方法含有子樹高度的重複計算,使用自底向上能夠有效的標記不符合平衡的子樹為-1,整個向上過程中,如果出現-1直接返回 */ bject Solution { def isBalanced(root: TreeNode): Boolean = { def helper(root: TreeNode): Int = { if (root == null) return 0 val leftTree = helper(root.left) if (leftTree == -1) return -1 val rightTree = helper(root.right) if (rightTree == -1) return -1 if (Math.abs(leftTree - rightTree) < 2) return Math.max(leftTree, rightTree)+1 else return -1 } if (root == null) return true return helper(root) != -1 } }