算法学习之树与算法

树结构

树结构

关键组成:根节点,叶子节点。
成员相对关系:父节点,子节点,兄弟节点。
在这里插入图片描述
树的遍历:

按照广度遍历:分层遍历,顺序为从上到下,从左到右。

按照深度遍历:根据递归顺序,分为三种,前序即按照中、左、右的顺序,中序即按照左、中、右的顺序,后序按照左、右、中的顺序。

算法实现

节点类定义:

class Node(object):
    def __init__(self, item, litem=None, ritem=None):
        self.item = item
        self.litem = litem
        self.ritem = ritem

树类定义:

class trees(object):
    def __init__(self, nodes=None):
        self.root = nodes
    def add(self, item):
        node = Node(item)
        if self.root == None:
            self.root = node
            return
        que = [self.root]
        while que:
            cur = que.pop(0)
            if cur.litem == None:
                cur.litem = node
                return
            if cur.ritem == None:
                cur.ritem = node
                return
            que.append(cur.litem)
            que.append(cur.ritem)
    def showalls(self):
        if self.root == None:
            return
        que = [self.root]
        while que:
            cur = que.pop(0)
            print(cur.item, end=' ')
            if cur.litem != None:
                que.append(cur.litem)
            if cur.ritem != None:
                que.append(cur.ritem)
    def befores(self, node):
        if node == None:
            return
        print(node.item, end=' ')
        self.befores(node.litem)
        self.befores(node.ritem)
    def middles(self, node):
        if node == None:
            return
        self.middles(node.litem)
        print(node.item, end=' ')
        self.middles(node.ritem)
    def afters(self, node):
        if node == None:
            return
        self.afters(node.litem)
        self.afters(node.ritem)
        print(node.item, end=' ')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值