在二叉树Python中获得第j级的第i个元素

我写的方法是getNode和helper。由于某些原因,它不起作用。这是代码 类节点:

    def __init__(self,data):

        self.left = None
        self.right = None
        self.data = data

    def insert(self,data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def helper(self,level,ind,arr):
        if level == 0:
            arr.append(self)
        else:
            if self.left:
                self.left.helper(level-1,arr)
            if self.right:
                self.right.helper(level-1,arr)

        return arr[ind]

    def getNode(self,ind):
        arr = []
        return self.helper(level,arr)





# Print the tree
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print(self.data),if self.right:
            self.right.PrintTree()

root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.insert(7)
root.insert(13)
root.PrintTree()

a = root.getNode(2,2).data
print('Answer is: ',a)

运行它后,出现以下错误:帮助程序中第33行的文件“ btree.py”     返回arr [ind] IndexError:列表索引超出范围

annalamiya 回答:在二叉树Python中获得第j级的第i个元素

看起来基本上是正确的,问题在于您的辅助函数正在递归地建立一个数组,但是在每次迭代中,它试图在第i个元素追加完成之前都返回它:

return arr[ind]

相反,您应该让帮助程序什么也不返回,只需填充给定数组,然后将getNode修改为:

def getNode(self,level,ind):
    arr = []
    self.helper(level,ind,arr)
    return arr[ind]
,

似乎您要为arr传递一个空数组,然后尝试访问其第3个元素(进行了一些递归调用后,可能会或可能不会导致向arr添加一些内容-我希望,如果其中任何一个调用确实添加了一些元素,它们添加的数量就不够。

我认为您正在尝试同时执行太多操作-而不是让递归帮助器函数尝试从数组中获取第N个项目(在完成构建之前),我将重点放在拥有帮助器上只是负责按照正确的顺序将事物添加到数组中,然后在所有帮助程序调用完成之后让getNode检查数组。

本文链接:https://www.f2er.com/3155802.html

大家都在问