平衡二叉树
why? what? when? how? 最近几天看了某个大佬写的学习总结,觉得这个方式不错就引进了。 why 为什么要用平衡二叉树? 二叉搜索树 二叉搜索树的查找效率和 BST 建立的时候节点输入顺序相关。 1. 若输入节点顺序 1、2、3、4、5 树的深度为 5,查找效率 O(N),平均查找长度 ASL = ( 1+2+3+4+5 ) / 5 = 3 2. 若输入节点顺序 4、3、5、1、2 该树是完全二叉树,树的深度是 3,查找效率是 O(log2n), ASL = ( 1+2 2+3 2 ) / 5 = 2.1 因为 BST 的查询效率和节点输入的顺序有很大联系最坏情况是 O(N),为了提高查询效率所以平衡二叉树(查找的时间复杂度 O(log2N) ―― 证明见定义后面)出现了。 what 什么是平衡二叉树? 平衡因子( Balance Factor,简称 BF ):BF(T)=hL-hR,其中hL和hR分别为T的左、右子树的高度。 平衡二叉树 ( Balanced Binary Tree ) ( AVL树 ) 空树,或者任一结点左、右子树高度差的绝对值不超过1,即 |BF(T)| <= 1 . 平衡二叉树的高度能达到 log2N 吗? 如果能到达那么相比 BST 查询效率会高很多。 证明:设nh高度为h的平衡二叉树的最少结点数。结点数最少时: 若结点一个 1