Skip to main content
 首页 » 编程设计

python之按顺序打印二叉树,python

2025年05月04日9sxdcgaq8080

我和我的 friend 正在做一些使用 Python 3.1 编程的学校作业,并且非常困难。我们正在编写一棵二叉树并且它工作正常,除非我们想要以一种可以创建句子的方式按顺序打印所有节点(所有单词按顺序依次排列)。我们一直在整个 Internet 上寻找有关如何进行的线索,并且我们已经为这个小东西工作了大约两个小时。任何建议/帮助都会很棒。

我们的程序/二叉树:

class Treenode:   
    def __init__(self, it = None, le = None, ri = None):   
        self.item = it   
        self.left = le   
        self.right = ri   
 
class Bintree:   
    def __init__(self):   
        self.item = None   
        self.left = None   
        self.right = None   
 
    def put(self, it = None): 
        key = Treenode(it) 
        if self.item == None: 
            self.item = key 
            return 
        p = self.item 
        while True: 
            if key.item < p.item: 
                if p.left == None: 
                    p.left = key 
                    return 
                else: 
                    p = p.left 
            elif key.item > p.item: 
                if p.right == None: 
                    p.right = key 
                    return 
                else: 
                    p = p.right 
            else: 
                return 
 
    def exists(self, it): 
        key = it 
        p = self.item 
        if p == key: 
            return True 
        while True: 
            if key < p.item: 
                if p.left == None: 
                    return False 
                else: 
                    p = p.left 
            elif key > p.item: 
                if p.right == None: 
                    return False 
                else: 
                    p = p.right 
            else: 
                return 
 
    def isEmpty(self): 
        if self.item == None: 
            return True 
        else: 
            return False 
 
def printtree (Treenode): 
    if Treenode.left != None: 
        printtree (Treenode.left) 
    print (Treenode.item) 
    if Treenode.right != None: 
        printtree (Treenode.right) 

当我们运行程序时,我们得到了一种打印,看起来像这样:“bintree.Treenode object at 0x02774CB0”,这不是我们想要的。

我们通过运行这个来使用树:

import bintree 
 
tree = bintree.Bintree() 
print(tree.isEmpty())    # should give True 
tree.put("solen") 
print(tree.isEmpty())    # should give False 
tree.put("gott") 
tree.put("sin") 
tree.put("hela") 
tree.put("ban") 
tree.put("upp") 
tree.put("himlarunden") 
tree.put("manen") 
tree.put("seglar") 
tree.put("som") 
tree.put("en") 
tree.put("svan") 
tree.put("uti") 
tree.put("midnattsstuden") 
 
print(tree.exists("visa"))     # should give False 
print(tree.exists("ban"))      # should give True 
tree.printtree()               # print sorted 

此外,倒数第二行给我们的是“None”而不是“True”,这很奇怪。

请您参考如下方法:

要打印二叉树,如果您要打印叶子,则只需打印值即可;否则,您先打印左 child ,然后打印右 child 。

def print_tree(tree): 
    if tree: 
        print tree.value 
        print_tree(tree.left) 
        print_tree(tree.right)