代码

import UIKit

/*
 二叉树的特点是:
1、每个节点最多有两棵子树
2、左子树和右子树是有顺序的,次序不能颠倒
3、即使某节点只有一个子树,也要区分左右子树*/

// 定义一个类作为二叉树中的节点
class BinaryTreeNode
{
    var content: Int
    var leftNode: BinaryTreeNode?
    var rightNode: BinaryTreeNode?
    
    init(_ content : Int)
    {
        self.content = content
        self.leftNode = nil
        self.rightNode = nil
    }
    
    // 添加一个方法,用来获得指定节点的最大深度
    func getMaxDepth(treeNode:BinaryTreeNode?) -> Int
    {
        // 假如指定节点为空,则返回的值为0。
        guard let node = treeNode else {
            return 0
        }
        // 接着使用递归的方式,获得指定节点的左节点和右节点的最大深度,并返回两者之间的较大的值
        let total = max(getMaxDepth(treeNode: node.leftNode), getMaxDepth(treeNode: node.rightNode)) + 1
        return total
    }
    // 添加一个方法,用来判断当前的节点,是否为二叉搜索树
    func isBinarySearchTree(treeNode:BinaryTreeNode?) -> Bool
    {
        // 判断指定的节点为空时,返回布尔的值为真
        guard let node = treeNode else {
            return true
        }
        // 二叉搜索树的特点是所有的右子节点,都必须大于根节点
        if node.leftNode != nil && node.content <= (node.leftNode?.content)!
        {
            return false
        }
        // 所有的左子节点,都必须小于于根节点
        if node.rightNode != nil && node.content >= (node.rightNode?.content)!
        {
            return false
        }
        // 使用递归的方式,对指定节点的左节点和右节点进行二叉搜索树的判断,并返回两者的逻辑与运算
        return isBinarySearchTree(treeNode:node.leftNode) && isBinarySearchTree(treeNode:node.rightNode)
    }
}

// 创建实例
var tree = BinaryTreeNode(10)
var treeLeft = BinaryTreeNode(5)
var treeRight = BinaryTreeNode(15)

tree.leftNode = treeLeft
tree.rightNode = treeRight
// 获取指定节点的最大深度
tree.getMaxDepth(treeNode: tree)
tree.isBinarySearchTree(treeNode: tree)

截图

iShot20220410 下午2.32.01.png

Q.E.D.