我正在尝试做一个大学项目。 基本上,我应该做的是通过将具有奇数值的节点的边缘定向为具有偶数节点的边缘,来从二叉搜索树创建图。 (如果node1的值为2,node2的值为3,我想像这样连接它们:3-> 2)。不过,不必创建新的边,我只需要确定已经存在的边。
该项目必须在Jupyter Notebook上完成,并且教授建议使用Graphviz库中的Digraph来可视化图形。我已经创建了我需要从其开始的二叉搜索树,但是在实现以我之前解释的方式连接节点的功能时遇到了麻烦。 n1问题是我无法从二进制搜索树中删除已经存在的边缘,所以我不得不从头开始创建图形。我的想法是将if条件直接插入到我用来在二进制搜索树中创建边的createABR函数中,但是它不起作用。 (下面的代码)
def createABR(self,x,abr):
if (x!=None):
abr.node(str(x.key))
if (x.p!=None):
y = x.p
if (x.key % 2)== 0 and (x.p.key % 2) != 0:
abr.edge(str(x.p.key), str(x.key))
self.createABR(x.left,abr)
self.createABR(x.right,abr)
def exportABR(self):
abr = Digraph()
self.createABR(self.root,abr)
return abr
这是主要代码:
a=ABR()
h=[10, 5, 11, 8, 7, 12, 2, 3]
for i in range(0, len(h)):
a.insert(Node(h[i]))
abr=a.exportABR()
print("Binary Search Tree T:")
abr
这是输出:
Binary Search Tree T:
10 5 3 7 11
/ \ |
v v v
2 8 12
我愿意接受建议!