python - BST算法的实现
问题描述
我想在 python 中转换这个算法。该算法必须基于 BST 算法构建树。当我运行我的代码时,他们给我 0 作为结果。
我正在递归地做它:
def complet(self,li=[]):
N=len(li)
n=log2(N+1)
delta=N-2**(n-1)
delta=delta+1
m1=2**(n-1)
m1=m1-1
m2=(2**(n-2))/2
if delta <= m2: x=m1+delta
else: x=m1
self=Noeud(x)
if len(li)==1: return self
else:
lg=li[int(len(li)/2):]
ld=li[:int(len(li)/2)]
self.gauche=self.complet(lg)
self.droit=self.complet(ld)
return self
我的代码:
from math import log2
import cmath
import math
L=["0111","10000","11100","100011","11","1","010" ]
def sort(l=[]):
for n in range(0,len(l)):
while len(l[n])<8:
l[n]=l[n]+"1"
print(l)
for k in range(0,len(l)):
for j in range(k,len(l)):
if int(l[j],2)> int(l[k],2):
bj=l[j]
l[j]=l[k]
l[k]=bj
print(l)
return l
sort(L)
class Noeud:
def __init__(self,va):
self.droit=None
self.gauche=None
self.valur=va
def complet(self,li=[]):
N=len(li)
n=log2(N+1)
delta=N-2**(n-1)
delta=delta+1
m1=2**(n-1)
m1=m1-1
m2=(2**(n-2))/2
if delta <= m2: x=m1+delta
else: x=m1
self=Noeud(x)
if len(li)==1: return self
else:
lg=li[int(len(li)/2):]
ld=li[:int(len(li)/2)]
self.gauche=self.complet(lg)
self.droit=self.complet(ld)
return self
def printTree(self):
if self.gauche:
self.printTree(self.gauche)
print(self.valur, end="")
if self.droit:
self.printTree(self.droit)
ar=Noeud(0)
ar.complet(L)
ar.printTree()
解决方案
首先,您的printTree
方法是无参数的,但是,您正在传递它self.gauche
并且self.droit
. 相反,您应该在左侧 ( gauche
) 和右侧 ( droit
) 节点上调用 printTree() 方法:
def printTree(self):
if self.gauche:
self.gauche.printTree()
print(self.valur, end="")
if self.droit:
self.droit.printTree()
其次,您没有使用complet
方法返回的值。您可以按如下方式解决此问题:
ar=Noeud(0)
ar2 = ar.complet(L)
ar2.printTree()
推荐阅读
- python - 我应该如何在 Python 中编写一个函数来检查用户是否获取了一些 url?
- regex - 如何使用部分查询字符串从弹性搜索中获取文档?
- c# - Unity c#错误四元数在控制台中无法识别
- angular - 具有服务参数的组件的角度单元测试
- r - 大文件处理 - 使用 chunked::read_csv_chunked 和 dplyr::filter 时出错
- android - 当我在自定义视图类中使用 R.styleable 时,我得到一个红色的 Unresolved reference: styleable
- amazon-web-services - Fargate 部署在上线之前多次重启
- json - JSON 加载了缺少的键/值对
- javascript - Github 页面上的 Javascript 和 HTML?
- java - springboot webflux couchbase API未显示结果