【数据结构】构造二叉树并实现访问操作

Description:

在定义树结点时,你的结点Node的属性应包括Node.elem, Node.lchild和Node.rchild等这三个属性,其分别代表节点的数据,节点的左孩子和节点的右孩子,属性的命名必须是elem、lchild和rchild。

同时,你需要根据输入数据建立一棵名为MyTree(注意大小写)的二叉树,该树拥有的变量应至少包含名为root(如MyTree.root)元素,代表该二叉树的根节点。

注意:树可能为空(树为空的情形指第一行无任何输入,即键入回车,空树没有任何结点)。

Solution:

# Filename: MyTree.py
class Node():
    def __init__(self,elem = None, lchild = None, rchild = None):
        self.elem = elem
        self.lchild_em = 0
        self.lchild = lchild
        self.rchild = rchild

class myTree():
    def __init__(self,values):
        self.queue = []
        self.root = None
        for i in range(len(values)):
            self.add(values[i])

    def add(self,value):
        if self.root == None:
            self.root = Node(value)
            self.queue.append(self.root)
        else:
            if value == '#':
                value = None
            now = self.queue[0]
            if now.lchild == None:
                now.lchild = Node(value)
                self.queue.append(now.lchild)
            else:
                now.rchild = Node(value)
                self.queue.pop(0) #第一个结点已装满,弹走!
                self.queue.append(now.rchild)


    def traversal(self):
        if self.root == None:
            print(None)
            return
        self.queue = []
        self.queue.append(self.root)
        while len(self.queue) != 0:
            now = self.queue.pop(0)
            if now != None:
                print(now.elem)
                self.queue.append(now.lchild)
                self.queue.append(now.rchild)


if __name__ == '__main__' :
    value = input().split()
    MyTree = myTree(value)
    #MyTree.traversal()

    N = int(input())
    for i in range(N):
        try:
            eval(input())
        except:
            print(None)

Bugs you may write:

1.你如何处理空树?

2.如何检查你写的代码对不对?(顺便写个遍历检查下树的结构吧)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值