⼆叉树:任何节点最多只允许有两个⼦节点,称为左⼦节点和右⼦节点,以递归的⽅式定义⼆叉树为,⼀个⼆叉树如果不为空,便是由⼀个根节点和左右两个⼦树构成, 左右⼦树都可能为空。
⼆叉搜索树:⼆叉搜索树可以提供对数时间的元素插⼊和访问。节点的放置规则是:任何节点的键值⼀定⼤于其左⼦树的每⼀个节点的键值,并⼩于其右⼦树中的每⼀个节点的键值。因此 ⼀直向左⾛可以取得最⼩值,⼀直向右⾛可以得到最⼤值。插⼊:从根节点开始,遇键值较⼤ 则向左,遇键值较⼩则向右,直到尾端,即插⼊点。删除:如果删除点只有⼀个⼦节点,则直 接将其⼦节点连⾄⽗节点。如果删除点有两个⼦节点,以右⼦树中的最⼩值代替要删除的位置。
平衡⼆叉树:其实对于树的平衡与否没有⼀个绝对的标准, “平衡”的⼤致意思是:没有任何⼀个节点过深,不同的平衡条件会造就出不同的效率表现。以及不同的实现复杂度。有数种特殊结构例如 AVL-tree, RB-tree, AA-tree,均可以实现平衡⼆叉树。
AVL-tree :⾼度平衡的平衡⼆叉树(严格的平衡⼆叉树) AVL-tree 是要求任何节点的左右⼦ 树⾼度相差最多为 1 的平衡⼆叉树。当插⼊新的节点破坏平衡性的时候,从下往上找到第⼀ 个不平衡点,需要进⾏单旋转,或者双旋转进⾏调整。