首页 > 解决方案 > Python - 树插入节点

问题描述

下面是我的代码。我无法弄清楚我的插入功能有什么问题。从我正在运行的测试来看,我的树看起来并没有插入新节点。谁能指出我正确的方向?例如,当我运行测试时,树的高度应该是 2,但输出是 3。但我几乎可以肯定长度函数是正确的。

class MyTree():
    def __init__(self, data):
        # Initialize this node, and store data in it
        self.data = data
        self.left = None
        self.right = None
        self.height = 0
        self.descendents = 0

    def getLeft(self):
        # Return the left child of this node, or None
        return self.left

    def getRight(self):
        # Return the right child of this node, or None
        return self.right

    def getData(self):
        # Return the data contained in this node
        return self.data

    def insert(self, data):
        if self.left == None:
            self.left = MyTree(data)
            self.descendents=1
        elif self.right == None:
            self.descendents=2
            self.right = MyTree(data)
        else :
            self.left.insert(data)
        return self


    def getHeight(self):
        # Return the height of this node

        if self.left==None:
                leftheight=0
        else:
            leftheight=self.left.getHeight() 

        if self.right==None:
            rightheight=0
        else:
            rightheight=self.right.getHeight()

        if self.left==None and self.right==None:
            return 0   
        h=max(leftheight, rightheight) + 1;
        self.height=h
        return h

下面是测试:

def Test(lib, seed=0, size=10, rounds=10, verbose=False):
random.seed(a=seed)

# Test MyTree

n = random.randint(0, size)
try:
    tree = lib.MyTree(n)
except:
    if verbose:
        print("Error: MyTree not creatable")
    return False


h=1
c=2
for i in range(1,size):
    n = random.randint(n,n*2)
    try:
        tree = tree.insert(n)

        #print(tree)
    except:
      #  print(c)
        if verbose:
            print("Error: Tree not insertable")
        return False

    tH = tree.getHeight()
    if CheckHeight(tree) != tH:
        if verbose:
            print("Error: Tree height calculation incorrect")
        return False

    if tH != h:
        if verbose:
            print("Error: Tree height incorrect: Should be {h} but is {tH}")
            print("should be:")

            print(h)
            print("is:")
            print(tH)
        return False

    if i == c:
        h+=1
        c+=(2**h)

del(tree)
if verbose:
    print("Tree test complete.")
# Tree works
yield  True

标签: pythontree

解决方案


推荐阅读