//二叉树特点,每个节点最多有两颗子树,
//左子树和右子树是有顺序的,次序不能颠倒
// 即使摩的几点只有一个子树,也要区分左右子树
//二叉树节点
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)