数据结构4.2-Root of AVL Tree

问题

Root of AVL Tree

代码

def adjust(A, tree):
    nodeA = tree[A]
    if nodeA[3] == 2:
        B = nodeA[1]
        nodeB = tree[B]

        if nodeB[3] == 1:
            tree[A][1] = nodeB[2]
            tree[B][2] = A

            if tree[0] == A:
                tree[0] = B

        elif nodeB[3] == -1:
            C = nodeB[2]
            nodeC = tree[C]
            tree[C][1] = B
            tree[C][2] = A
            tree[B][2] = nodeC[1]
            tree[A][1] = nodeC[2]

            if tree[0] == A:
                tree[0] = C

        tree[B][3] = 0

    elif nodeA[3] == -2:
        B = nodeA[2]
        nodeB = tree[B]

        if nodeB[3] == -1:
            tree[A][2] = nodeB[1]
            tree[B][1] = A

            if tree[0] == A:
                tree[0] = B

        elif nodeB[3] == 1:
            C = nodeB[1]
            nodeC = tree[C]
            tree[C][2] = B
            tree[C][1] = A
            tree[B][1] = nodeC[2]
            tree[A][2] = nodeC[1]

            if tree[0] == A:
                tree[0] = C

        tree[B][3] = 0

    tree[A][3] = 0

def insert(i, tree):
    i = [int(i), '-', '-', 0]
    tree.append(i)

    p = [-1]
    j = tree[tree[0]]
    while True:
        if j[0] == i[0]:
            break

        elif j[0] > i[0]:
            j[3] += 1
            if j[3] == 2:
                p.append(tree.index(j))

            if j[1] == '-':
                j[1] = len(tree) - 1
                break

            j = tree[j[1]]

        elif j[0] < i[0]:
            j[3] -= 1
            if j[3] == -2:
                p.append(tree.index(j))

            if j[2] == '-':
                j[2] = len(tree) - 1
                break

            j = tree[j[2]]
    
    if p[-1] >= 0:
        for node in p[1:-1]:
            if tree[node][3] == 2:
                tree[node][3] = 1
            elif tree[node][3] == -2:
                tree[node][3] = -1

        adjust(p[-1], tree)

def buildAVL(nodes):
    tree = [1]
    for i in nodes:
        insert(i, tree)
    return tree

n = int(input())
nodes = input().split(' ')
tree = buildAVL(nodes)
root = tree[0]
print(tree[root][0])

有任何问题请回复提出。然后欢迎关注微信公众号格物致愚

格物致愚

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • 文/龙女 每当夜幕降临,空中群星闪耀。 最近的一颗星星,离地球也要好几千万公里,遥不可及。 突然有一天,风雷大作,...
    龙十五_阅读 940评论 19 22
  • 昨晚又失眠了!凌晨2点半、我在看书!试过各种方法依旧睡不着!3点躺下6点起床、今天还得上班!哪那都疼、因失眠而头疼...
    3bbfb5ebb2f9阅读 125评论 0 0
  • 今天是除夕,中国最重要最喜庆的节日!吃团圆饭,看春晚,穿新衣服,放花炮,抢红包,人人玩的不亦乐乎。虽然年味是没...
    慢慢2016阅读 115评论 0 0