数据结构(三)树

在此进行实现的主要是二叉树,其具备广度优先、深度优先两种存储和遍历方式

对于广度优先而言,进行存储的方式是队列,先存进去一个节点,再将其取出,将其左右节点加入列表,即从一端存从另一端取,先存的需要先取

class Node(object):
    def __init__(self,value,lchild=None,rchild=None):
        self.value=value
        self.lchild=lchild
        self.rchild=rchild


class Binary_tree(object):
    def __init__(self):
        self.root=None

    #向完全二叉树上添加节点,用广度优先方法进行遍历,进行类似队列的操作,从列表头取出元素看它是否有子节点,若有就添加到
    #队尾,没有就将欲添加的节点链过去
    def add(self,value):
        quenue=[self.root]
        node=Node(value)
        if self.root==None:
            self.root=node
        else:
            while quenue:
                cur_node=quenue.pop(0)
                if cur_node.lchild==None:
                    cur_node.lchild=node
                    return
                else:
                    quenue.append(cur_node.lchild)
                if cur_node.rchild==None:
                    cur_node.rchild=node
                    return
                else:
                    quenue.append(cur_node.rchild)
#进行广度优先遍历
    def breadth_iter(self):
        queue=[self.root]
        if self.root==None:
            return
        else:
            while queue:
                cur_node=queue.pop(0)
                print(cur_node.value)
                if cur_node.lchild!=None:
                    queue.append(cur_node.lchild)
                if cur_node.rchild!=None:
                    queue.append(cur_node.rchild)

#进行深度优先遍历,其中分为先序遍历,中序遍历和后序遍历
    def pre_order_iter(self,root):
        if root!=None:
            print(root.value,end=" ")
            self.pre_order_iter(root.lchild)
            self.pre_order_iter(root.rchild)

    def mid_order_iter(self,root):
        if root!=None:
            self.mid_order_iter(root.lchild)
            print(root.value,end=" ")
            self.mid_order_iter(root.rchild)


    def back_order_iter(self,root):
        if root!=None:
            self.back_order_iter(root.lchild)
            self.back_order_iter(root.rchild)
            print(root.value,end=" ")

if __name__=="__main__":
    tree=Binary_tree()
    tree.add(3)
    tree.add(5)
    tree.add(10)
    tree.add(6)
    # tree.breadth_iter()
    tree.pre_order_iter(tree.root)
    print("\n")
    tree.mid_order_iter(tree.root)
    print("\n")
    tree.back_order_iter(tree.root)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值