Swift-이차 찾기 트리 판단

2535 단어
제목: 두 갈래 나무 한 그루가 두 갈래 나무인지 확인해 보세요.

해법 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--- ")
}`

좋은 웹페이지 즐겨찾기