BST二叉搜索树插入一个节点后检测距离当前节点最近的失衡点,binarytree,Python

Posted zhangphil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BST二叉搜索树插入一个节点后检测距离当前节点最近的失衡点,binarytree,Python相关的知识,希望对你有一定的参考价值。

BST二叉搜索树插入一个节点后检测距离当前节点最近的失衡点,binarytree,Python

思路:二叉搜索树之所以不平衡,发生在插入新节点后,那么沿着新插入节点,逆向沿着当前节点的父节点,一路检测节点平衡因子,当发现绝对值>1的平衡因子,即为最近的失衡点。

def check_unblance(root, number):
    ret = None

    un_blance_node = None
    for n in root.levelorder:
        if n.value == number:
            un_blance_node = n
            break

    h = 0
    while h <= root.height:
        h = h + 1

        factor = get_blance_factor(un_blance_node)
        print('节点', un_blance_node.value, '平衡因子', factor)
        if abs(factor) > 1:
            print('检测到不平衡', un_blance_node.value, factor)
            ret = (un_blance_node, factor)
            break
        else:
            un_blance_node = get_parent(root, un_blance_node)

    return ret


def get_blance_factor(node):
    factor = 0

    if node.height == 0:
        factor = 0
        return factor

    left = node.left
    right = node.right

    lh = 0
    rh = 0
    if left is not None:
        lh = node.left.height + 1

    if right is not None:
        rh = node.right.height + 1

    factor = lh - rh

    return factor

最后返回(失衡节点,平衡因子)。

以上是关于BST二叉搜索树插入一个节点后检测距离当前节点最近的失衡点,binarytree,Python的主要内容,如果未能解决你的问题,请参考以下文章

BST二叉搜索树插入节点建树并找出不平衡节点,networkx,Python

BST二叉搜索树插入节点建树并找出不平衡节点,networkx,Python

二叉树搜索子树的最大键值和

二叉搜索树BST广度优先搜索遍历BFS计算树高度,非递归,binarytree,python

701. 二叉搜索树中的插入操作

二叉树:搜索树中的插入操作