github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/algorithm/datastructures/tree/avl/utils.go (about) 1 package avl 2 3 func min(a, b int) int { 4 if a > b { 5 return b 6 } else { 7 return a 8 } 9 } 10 11 func max(a, b int) int { 12 if a > b { 13 return a 14 } else { 15 return b 16 } 17 } 18 19 func abs(a int) int { 20 if a < 0 { 21 return -a 22 } 23 return a 24 } 25 26 // 判断该二叉树是否是一棵二分搜索树 27 func IsBST(tree *AVLTree) bool { 28 if tree == nil { 29 return false 30 } 31 var ls []interface{} 32 tree.InOrder(func(i interface{}) { 33 ls = append(ls, i) 34 }) 35 for i := 1; i < len(ls); i++ { 36 cmp := tree.compareFunc(ls[i-1], ls[i]) 37 if cmp > 0 { 38 return false 39 } 40 } 41 return true 42 } 43 44 // 判断该二叉树是否是一棵平衡二叉树 45 func IsBalanced(tree *AVLTree) bool { 46 if tree == nil { 47 return false 48 } 49 return isBalanced(tree.root) 50 } 51 52 //判断以Node为根的二叉树是否是一棵平衡二叉树,递归算法 53 func isBalanced(n *avlNode) bool { 54 if n == nil { 55 return true 56 } 57 balanceFactor := getBalanceFactor(n) 58 if abs(balanceFactor) > 1 { 59 return false 60 } 61 // 左子树右子树都是平衡二叉树才是 62 return isBalanced(n.left) && isBalanced(n.right) 63 }