当前位置: 首页 > 知识库问答 >
问题:

python使用现有函数创建二叉搜索树

茅和玉
2023-03-14

我正在练习用Python创建一个平衡的二叉搜索树。我已经有了以下这些,关于如何创建一个balance_bst函数的任何想法,该函数传递了一个按递增顺序排序的唯一值列表。它返回对平衡良好的二叉搜索树的根的引用:

class LN:
    def __init__(self,value,next=None):
        self.value = value
        self.next  = next

def list_to_ll(l):
    if l == []:
        return None
    front = rear = LN(l[0])
    for v in l[1:]:
        rear.next = LN(v)
        rear = rear.next
    return front

def str_ll(ll):
    answer = ''
    while ll != None:
        answer += str(ll.value)+'->'
        ll = ll.next
    return answer + 'None'



# Tree Node class and helper functions (to set up problem)

class TN:
    def __init__(self,value,left=None,right=None):
        self.value = value
        self.left  = left
        self.right = right

def height(atree):
    if atree == None:
        return -1
    else:
        return 1+ max(height(atree.left),height(atree.right))

def size(t):
    if t == None:
        return 0
    else:
        return 1 + size(t.left) + size(t.right)

def is_balanced(t):
    if t == None:
        return True
    else:
        return abs(size(t.left)-size(t.right)) <= 1 and is_balanced(t.left) and is_balanced(t.right)

def str_tree(atree,indent_char ='.',indent_delta=2):
    def str_tree_1(indent,atree):
        if atree == None:
            return ''
        else:
            answer = ''
            answer += str_tree_1(indent+indent_delta,atree.right)
            answer += indent*indent_char+str(atree.value)+'\n'
            answer += str_tree_1(indent+indent_delta,atree.left)
            return answer
    return str_tree_1(0,atree) 

如何编写balance_bst?

def balance_bst(l):
def build_balanced_bst(l):
    if l == None:
        return None
    else:
        middle = len(l) // 2
        return TN(l[middle],
        build_balanced_bst(l[:middle]),
        build_balanced_bst(l[middle + 1:]))
IndexError: list index out of range

我怎么修好它?

共有1个答案

邹丰羽
2023-03-14

我不打算为你写它,因为这不是为什么,但大致的想法是这样的。由于列表已经排序,根应该是列表中间的元素。它的左子树将是由列表中根左边的元素组成的平衡树的根,右子树将是其余的子树。

 类似资料:
  • 好的,所以我目前正在尝试创建一个二叉搜索树,每个节点都包含对某个对象的引用,以及对其左侧子项的引用和对右子项的引用(总共3个变量)。左子项必须始终小于其父项,而右子项必须始终大于其父项。我必须创建两个方法:1种方法( contains()) 来检查元素是否在树中,以及一个add()方法将元素添加到树中的适当位置。 以下是BinarySearchTree类: 下面是TreeNode类(包含在Bina

  • 本文向大家介绍C#创建二叉搜索树的方法,包括了C#创建二叉搜索树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#创建二叉搜索树的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题在于从搜索函数返回的MyClass对象(mc)。 我跟踪到Search()并确保“r- “退货”有什么问题吗 谢啦! 我有点困惑。。我可以改为“数据类型BST::搜索(常量字符串名称)”而不是“数据类型*BST::搜索(常量字符串名称)”。。。。编译器似乎无法通过。返回NULL将有一些问题。。。 但是我尝试了你的方法来更改DataType*没有de::getIthem()它仍然有错误.....

  • 到目前为止我的理解是: > (i)调用值=10的。由于root已经设置为50,如果条件为10<50,程序将进入第二个。 (ii)调用Root.left为10,节点值为2的递归insert函数。程序再次进入第二个if条件,条件为2<10。 (iii)再次调用Root.left为None,value为2的递归insert函数。现在程序进入first if条件,root获得值2。这将完成递归重复调用,程

  • 我不知道这些节点是否被插入,但输出结果是正确的。我只想插入节点到左边的孩子,我可以消除那代码吗?root.right=insertLevelOrder(arr,root.right,2*i+2); 还有为什么这个循环没有“i++”的符号,int i是如何自动增加的?

  • 这里有问题 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,根据使用的时间有效地检查给定的二叉搜索树是否包含给定的值。

  • 我需要实现一个Binary Search Tree类作为家庭作业,但我很难实现insert函数。我在谷歌搜索了很多,想找到一些解决方案或可能的方法,但他们都没有使用过键和值(大多只是值),或者如果他们也使用了键,他们有很多单独的功能,我想这是不允许的。 因此,预构建的只是: 现在的问题是,如果我想检查例如值是否小于或大于当前节点以将其放在右侧或左侧,我会收到诸如“root未定义”或“root.ri

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码: