zl程序教程

您现在的位置是:首页 >  其他

当前栏目

039_swift_模拟二叉树

2023-09-27 14:27:38 时间
//二叉树特点,每个节点最多有两颗子树,
//左子树和右子树是有顺序的,次序不能颠倒
// 即使摩的几点只有一个子树,也要区分左右子树
//二叉树节点
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(trodeNode: BinaryTreeNode?)-> Int{
        guard let node=trodeNode else {
            return 0
        }
        let total=max(getMaxDepth(trodeNode: node.leftNode),getMaxDepth(trodeNode: 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(3)
var rightTree=BinaryTreeNode(5)
tree.leftNode = treeLeft
tree.rightNode = rightTree


tree
tree.getMaxDepth(trodeNode: tree)
tree.isBinarySearchTree(treeNode: tree)