平衡二叉树的实现
我们在遍历二叉树时,先一直往左遍历,于是我们发现,当一棵树的每个节点都只有一个子节点时,他就变成了一个链表,然后链表就说啊:
❝年轻人你不要过度消费我,这好吗?这不好。
❞
所以我们针对这个问题进行优化,就出现了「平衡二叉树」。
何为平衡,平衡是指,二叉树中任意节点的左右子树的高度差都不大于1。当插入或删除一个节点时,我们需要通过一次或多次树的「旋转」来保持二叉树的平衡。
树的旋转分为「左旋」和「右旋」两种具体操作,这两种操作是完全相反的,互为逆操作。
左旋是「将该节点的右子树逆时针旋转」,右旋是「将该节点的左子树顺时针旋转」。
对于一个节点node进行左旋操作时,具体操作为:「将node.right子树取下,node.right节点称为新的根节点newRoot,将node接在newRoot的左节点,newRoot.left取下接在node的右节点上。」
右旋操作相反:「将node.left子树取下,node.left节点作为新的根节点newRoot,将node接在newRoot的右节点,newRoot.right取下接在node的左节点上。」