From 5178f3b530ba3654bf5dd8d487aa3cea949b2448 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Wed, 24 Apr 2024 09:02:00 +0100 Subject: [PATCH 1/2] Swift Implementation for LCCI 04.04 --- lcci/04.04.Check Balance/README.md | 34 +++++++++++++++++++++++++ lcci/04.04.Check Balance/README_EN.md | 34 +++++++++++++++++++++++++ lcci/04.04.Check Balance/Solution.swift | 31 ++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 lcci/04.04.Check Balance/Solution.swift diff --git a/lcci/04.04.Check Balance/README.md b/lcci/04.04.Check Balance/README.md index fd20dab40c0dc..a699c8a5ee0ab 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..5d6e2de6459a5 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 From f8b57ec4bf0cf63ab78944fcf6b11f2c15fb9af7 Mon Sep 17 00:00:00 2001 From: klever34 Date: Wed, 24 Apr 2024 08:06:20 +0000 Subject: [PATCH 2/2] style: format code and docs with prettier --- lcci/04.04.Check Balance/README.md | 4 ++-- lcci/04.04.Check Balance/README_EN.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lcci/04.04.Check Balance/README.md b/lcci/04.04.Check Balance/README.md index a699c8a5ee0ab..1f8900aa27bbe 100644 --- a/lcci/04.04.Check Balance/README.md +++ b/lcci/04.04.Check Balance/README.md @@ -172,13 +172,13 @@ function isBalanced(root: TreeNode | null): boolean { * var val: Int * var left: TreeNode? * var right: TreeNode? -* +* * init(_ val: Int) { * self.val = val * self.left = nil * self.right = nil * } -* } +* } */ class Solution { diff --git a/lcci/04.04.Check Balance/README_EN.md b/lcci/04.04.Check Balance/README_EN.md index 5d6e2de6459a5..ab6a2416cc2d2 100644 --- a/lcci/04.04.Check Balance/README_EN.md +++ b/lcci/04.04.Check Balance/README_EN.md @@ -215,13 +215,13 @@ function isBalanced(root: TreeNode | null): boolean { * var val: Int * var left: TreeNode? * var right: TreeNode? -* +* * init(_ val: Int) { * self.val = val * self.left = nil * self.right = nil * } -* } +* } */ class Solution {