Swift-이차 찾기 트리 판단
해법 1
중순으로 훑어본 후에, 만약 수조가 질서가 있다면, 두 갈래 나무는 두 갈래로 나무를 찾습니다` func copyBST(root:TreeNode?,data:inout [String]) {
if root == nil {
return
}
copyBST(root: root?.leftChild, data: &data)
data.append(root!.data!)
copyBST(root: root?.rightChild, data: &data)
}
func isBST(root:TreeNode?) -> Bool {
if root == nil {
return false
}
var data:[String] = []
copyBST(root: root, data: &data)
print(" ---\(data)")
for i in 0.. Int(data[i + 1])! {
return false
}
}
return true
}`
해법 2
중순으로 옮겨다니는 수조는 사실 사용하지 않아도 된다. 마지막 방문한 숫자만 기록하면 된다. 현재 숫자가 최소 숫자보다 작으면 성공하지 못한다` var lastNum:Int = Int.min
func isBST2(root:TreeNode?) -> Bool {
if root == nil {
return true
}
//
if !isBST2(root: root?.leftChild) {
return false
}
if Int(root!.data!)! <= lastNum {
return false
}
//
if !isBST2(root: root?.rightChild) {
return false
}
return true
}`
해법 3
두 갈래로 나무를 찾는 노드 왼쪽의 모든 노드 값은 그 자체의 수치보다 작고 오른쪽의 값은 그 자체의 수치보다 크다. 만약 숫자가 최대치와 최소치 사이에 있다면 성공한다` func isBST3(root:TreeNode?) -> Bool {
return checkBST3(node: root, min: Int.min, max: Int.max)
}
func checkBST3(node:TreeNode?,min:Int,max:Int) -> Bool {
if node == nil {
return true
}
let value:Int = Int(node!.data!)!
if value < min || value >= max {
return false
}
if !checkBST3(node: node?.leftChild, min: min, max: value) || !checkBST3(node: node?.rightChild, min: value, max: max){
return false
}
return true
}`
테스트 코드:`var isBST:Bool = binarySearchTree.isBST(root: searchNode)
if isBST {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}
var isBST2:Bool = binarySearchTree.isBST2(root: searchNode)
if isBST2 {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}
var isBST3:Bool = binarySearchTree.isBST3(root: searchNode)
if isBST3 {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}`
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
` func copyBST(root:TreeNode?,data:inout [String]) {
if root == nil {
return
}
copyBST(root: root?.leftChild, data: &data)
data.append(root!.data!)
copyBST(root: root?.rightChild, data: &data)
}
func isBST(root:TreeNode?) -> Bool {
if root == nil {
return false
}
var data:[String] = []
copyBST(root: root, data: &data)
print(" ---\(data)")
for i in 0.. Int(data[i + 1])! {
return false
}
}
return true
}`
해법 2
중순으로 옮겨다니는 수조는 사실 사용하지 않아도 된다. 마지막 방문한 숫자만 기록하면 된다. 현재 숫자가 최소 숫자보다 작으면 성공하지 못한다` var lastNum:Int = Int.min
func isBST2(root:TreeNode?) -> Bool {
if root == nil {
return true
}
//
if !isBST2(root: root?.leftChild) {
return false
}
if Int(root!.data!)! <= lastNum {
return false
}
//
if !isBST2(root: root?.rightChild) {
return false
}
return true
}`
해법 3
두 갈래로 나무를 찾는 노드 왼쪽의 모든 노드 값은 그 자체의 수치보다 작고 오른쪽의 값은 그 자체의 수치보다 크다. 만약 숫자가 최대치와 최소치 사이에 있다면 성공한다` func isBST3(root:TreeNode?) -> Bool {
return checkBST3(node: root, min: Int.min, max: Int.max)
}
func checkBST3(node:TreeNode?,min:Int,max:Int) -> Bool {
if node == nil {
return true
}
let value:Int = Int(node!.data!)!
if value < min || value >= max {
return false
}
if !checkBST3(node: node?.leftChild, min: min, max: value) || !checkBST3(node: node?.rightChild, min: value, max: max){
return false
}
return true
}`
테스트 코드:`var isBST:Bool = binarySearchTree.isBST(root: searchNode)
if isBST {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}
var isBST2:Bool = binarySearchTree.isBST2(root: searchNode)
if isBST2 {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}
var isBST3:Bool = binarySearchTree.isBST3(root: searchNode)
if isBST3 {
print("FlyElephant--- ")
} else {
print("FlyElephant--- ")
}`
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.