From 96a060ee4716b2a2abb1ccd40ff4c1b983672b81 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Thu, 25 Apr 2024 08:53:41 +0100 Subject: [PATCH 1/2] Swift Implementation for LCCI 04.05 --- lcci/04.05.Legal Binary Search Tree/README.md | 41 +++++++++++++++++++ .../README_EN.md | 41 +++++++++++++++++++ .../Solution.swift | 38 +++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 lcci/04.05.Legal Binary Search Tree/Solution.swift diff --git a/lcci/04.05.Legal Binary Search Tree/README.md b/lcci/04.05.Legal Binary Search Tree/README.md index 69df7c795671a..af8328104471e 100644 --- a/lcci/04.05.Legal Binary Search Tree/README.md +++ b/lcci/04.05.Legal Binary Search Tree/README.md @@ -291,6 +291,47 @@ public class Solution { } ``` +```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 { + private var prev: TreeNode? + + func isValidBST(_ root: TreeNode?) -> Bool { + return dfs(root) + } + + private func dfs(_ root: TreeNode?) -> Bool { + guard let root = root else { + return true + } + + if !dfs(root.left) { + return false + } + + if let prev = prev, prev.val >= root.val { + return false + } + + prev = root + + return dfs(root.right) + } +} +``` + diff --git a/lcci/04.05.Legal Binary Search Tree/README_EN.md b/lcci/04.05.Legal Binary Search Tree/README_EN.md index 2d108cdc6e234..e11453bfa21a2 100644 --- a/lcci/04.05.Legal Binary Search Tree/README_EN.md +++ b/lcci/04.05.Legal Binary Search Tree/README_EN.md @@ -328,6 +328,47 @@ public class Solution { } ``` +```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 { + private var prev: TreeNode? + + func isValidBST(_ root: TreeNode?) -> Bool { + return dfs(root) + } + + private func dfs(_ root: TreeNode?) -> Bool { + guard let root = root else { + return true + } + + if !dfs(root.left) { + return false + } + + if let prev = prev, prev.val >= root.val { + return false + } + + prev = root + + return dfs(root.right) + } +} +``` + diff --git a/lcci/04.05.Legal Binary Search Tree/Solution.swift b/lcci/04.05.Legal Binary Search Tree/Solution.swift new file mode 100644 index 0000000000000..ebaa5db0b75f0 --- /dev/null +++ b/lcci/04.05.Legal Binary Search Tree/Solution.swift @@ -0,0 +1,38 @@ +/* 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 { + private var prev: TreeNode? + + func isValidBST(_ root: TreeNode?) -> Bool { + return dfs(root) + } + + private func dfs(_ root: TreeNode?) -> Bool { + guard let root = root else { + return true + } + + if !dfs(root.left) { + return false + } + + if let prev = prev, prev.val >= root.val { + return false + } + + prev = root + + return dfs(root.right) + } +} From 096a6a1be3d210a24de0341e92d228f1ee5f8ee9 Mon Sep 17 00:00:00 2001 From: klever34 Date: Thu, 25 Apr 2024 08:32:12 +0000 Subject: [PATCH 2/2] style: format code and docs with prettier --- lcci/04.05.Legal Binary Search Tree/README.md | 4 ++-- lcci/04.05.Legal Binary Search Tree/README_EN.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lcci/04.05.Legal Binary Search Tree/README.md b/lcci/04.05.Legal Binary Search Tree/README.md index af8328104471e..17784c9f040fb 100644 --- a/lcci/04.05.Legal Binary Search Tree/README.md +++ b/lcci/04.05.Legal Binary Search Tree/README.md @@ -320,11 +320,11 @@ class Solution { if !dfs(root.left) { return false } - + if let prev = prev, prev.val >= root.val { return false } - + prev = root return dfs(root.right) diff --git a/lcci/04.05.Legal Binary Search Tree/README_EN.md b/lcci/04.05.Legal Binary Search Tree/README_EN.md index e11453bfa21a2..1bd098c9c9c19 100644 --- a/lcci/04.05.Legal Binary Search Tree/README_EN.md +++ b/lcci/04.05.Legal Binary Search Tree/README_EN.md @@ -357,11 +357,11 @@ class Solution { if !dfs(root.left) { return false } - + if let prev = prev, prev.val >= root.val { return false } - + prev = root return dfs(root.right)