python强化20日 第五天

python强化20日(强行非蓝桥日)

第五天 回顾数据结构-树

数据结构-树


#树类中计算深度的算法     这是一个递归算法
def depth(self,p):
    if self.is_root(p):
        return 0
    else:
        return 1+self.depth(self.parent(p))    #有一个父亲节点就+1,一直加到根节点为止
#树的高度:一颗非空树T的高度等于其所有叶子节点深度的最大值
#此方法每一层都调用了递归,时间复杂度为O(n^2),并不高效
def _height1(self):
    return max(self.depth(p) for p in self.positions() if self.is_leaf(p))  #调用深度函数,完成对positions所有叶子节点的遍历,找到最深的叶子节点的深度
#一种高效的方法计算树的高度
#计算以一个p节点为根节点的子树的高度
def _height2(self,p):
    if self.is_leaf(p):
        return
    else:
        return 1 + max(self._height(c) for c in self.children(p))
#该算法是递归的并且是从上到下执行的
#将会一个一个遍历一次树上的所有节点,不是叶子节点则返回子节点,来找到最深层的叶子节点,类于DFS加暴力
#计算整个树或者一个给定位置作为根节点的子树的高度的Tree.height方法,(直接调用_height2进行封装)
def height(self, p = None):
    if p is None:
        p = self.root()
    return self._height2(p)
  • 知识点:非空完全二叉树T中,有 n E n_E nE个外部节点(叶子节点)与 n I n_I nI个内部节点(非叶子节点),则有 n E n_E nE = n I n_I nI+1

实现二叉树

  • 方法:使用链式存储结构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值