伪代码放入python:二进制树

问题描述 投票:0回答:1

我有这个伪代码来生成完美平衡的二叉树并将其打印出来,我必须将其转换为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编程的初学者。

python
1个回答
0
投票

您的同学昨天问了同样的问题。看看here

© www.soinside.com 2019 - 2024. All rights reserved.