diff --git a/lcci/04.05.Legal Binary Search Tree/README.md b/lcci/04.05.Legal Binary Search Tree/README.md index 69df7c795671a..17784c9f040fb 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..1bd098c9c9c19 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) + } +}

AltStyle によって変換されたページ (->オリジナル) /