我有这个伪代码来生成完美平衡的二叉树并将其打印出来,我必须将其转换为python:
procedure GeneratePBT(var tree: BinTree, N: integer);
var x : TB;
begin
if N = 0 then
tree := nil
else
begin
new(tree)
read(x)
tree.elem := x;
GeneratePBT(tree.left, N div 2);
GeneratePBT(tree.right, N - N div 2 - 1);
end
end;
procedure PrintBinTree (tree : BinTree, h : integer);
var i : integer;
begin
if tree <> nil then
begin
PrintBinTree(tree.right, h+1);
for i:=1 to h do
write ('......');
writeln(tree.elem);
PrintBinTree(tree.left, h+1);
end;
end;
我的代码如下:
from numpy.random import randint
import random
class binarytree:
def __init__(self):
self.elem = 0
self.left = None
self.right = None
def printtree(tree, h):
if tree is not None:
printtree(tree.right, h+1)
for i in range(1, h):
print(end = ".....")
print(tree.elem)
printtree(tree.left, h+1)
def generate(tree, N, h):
if N == 0:
tree = None
else:
tree = binarytree()
x = randint(0, 1000000)
tree.elem = int(x)
generate(tree.left, N // 2, h)
generate(tree.right, N - N // 2 - 1, h)
printtree(tree, h)
tree = binarytree()
generate(tree, 3, 0)
我获得的输出不是我想要获得的输出。例如,我需要接收此输出:
....3
1
....2
我只得到这个:
....3
....1
....2
或此
1
2
3
我不知道我在哪里犯错。希望有人可以帮助我。
而且我知道我的代码的结构类似于c语言,但是我仍然是使用python编程的初学者。
您的同学昨天问了同样的问题。看看here。