diff --git a/lcci/04.04.Check Balance/README.md b/lcci/04.04.Check Balance/README.md index fd20dab40c0dc..1f8900aa27bbe 100644 --- a/lcci/04.04.Check Balance/README.md +++ b/lcci/04.04.Check Balance/README.md @@ -167,6 +167,40 @@ function isBalanced(root: TreeNode | null): boolean { } ``` +```swift +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +class Solution { + func isBalanced(_ root: TreeNode?) -> Bool { + return dfs(root) >= 0 + } + + private func dfs(_ root: TreeNode?) -> Int { + guard let root = root else { + return 0 + } + + let leftHeight = dfs(root.left) + let rightHeight = dfs(root.right) + if leftHeight < 0 || rightHeight < 0 || abs(leftHeight - rightHeight) > 1 { + return -1 + } + return max(leftHeight, rightHeight) + 1 + } +} +``` + diff --git a/lcci/04.04.Check Balance/README_EN.md b/lcci/04.04.Check Balance/README_EN.md index 4a08d7f82d7ee..ab6a2416cc2d2 100644 --- a/lcci/04.04.Check Balance/README_EN.md +++ b/lcci/04.04.Check Balance/README_EN.md @@ -210,6 +210,40 @@ function isBalanced(root: TreeNode | null): boolean { } ``` +```swift +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +class Solution { + func isBalanced(_ root: TreeNode?) -> Bool { + return dfs(root) >= 0 + } + + private func dfs(_ root: TreeNode?) -> Int { + guard let root = root else { + return 0 + } + + let leftHeight = dfs(root.left) + let rightHeight = dfs(root.right) + if leftHeight < 0 || rightHeight < 0 || abs(leftHeight - rightHeight) > 1 { + return -1 + } + return max(leftHeight, rightHeight) + 1 + } +} +``` + diff --git a/lcci/04.04.Check Balance/Solution.swift b/lcci/04.04.Check Balance/Solution.swift new file mode 100644 index 0000000000000..b667b42ae3486 --- /dev/null +++ b/lcci/04.04.Check Balance/Solution.swift @@ -0,0 +1,31 @@ +/* class TreeNode { +* var val: Int +* var left: TreeNode? +* var right: TreeNode? +* +* init(_ val: Int) { +* self.val = val +* self.left = nil +* self.right = nil +* } +* } +*/ + +class Solution { + func isBalanced(_ root: TreeNode?) -> Bool { + return dfs(root) >= 0 + } + + private func dfs(_ root: TreeNode?) -> Int { + guard let root = root else { + return 0 + } + + let leftHeight = dfs(root.left) + let rightHeight = dfs(root.right) + if leftHeight < 0 || rightHeight < 0 || abs(leftHeight - rightHeight) > 1 { + return -1 + } + return max(leftHeight, rightHeight) + 1 + } +} \ No newline at end of file