因为BSTree的不确定性导致其可能成为非常极端的单支树,所以有了AVLTree.接下来说一下AVLTree的小细节。
AVLTree 高度平衡的二叉搜索树 平衡因子 bf = rh - lh
即利用bf=根节点的右树长度-左树长度的正负值,来将极端情况下的BSTree调节平衡。
在AVLTree中,调节过程需要用到stack,stack先把插入的地址都存入栈中,直到不平衡出栈,找到父节点。
‘ \ ’ 左单旋转 , ‘ / ’ 右单旋转 。
‘ > '先右后左 , ‘ < ’ 先左后右 。
各种旋转都分包成各个函数,传入的参数是bf不平衡的那个节点信息。
Remove 的节点 最多只能有一个子女节点,如果没有,利用左右子节点调整数值。
本次利用找到左子树的右子树的最大值 用于替换要删除的根节点的值,最终删除这个替换了的值。
关键点:
Remove对于平衡因子bf的判断 如果用要判断节点的值和删除的值作比较就可以判断出哪边是删除了的,哪边没有,由此对bf进行正确的加减。若是用left/rightChild做判断,就会被nullptr所误导,因为你不清楚哪个是本来就是nullptr,哪个是删除成nullptr