#树的高度:一颗非空树T的高度等于其所有叶子节点深度的最大值#此方法每一层都调用了递归,时间复杂度为O(n^2),并不高效def_height1(self):returnmax(self.depth(p)for p in self.positions()if self.is_leaf(p))#调用深度函数,完成对positions所有叶子节点的遍历,找到最深的叶子节点的深度
#一种高效的方法计算树的高度#计算以一个p节点为根节点的子树的高度def_height2(self,p):if self.is_leaf(p):returnelse:return1+max(self._height(c)for c in self.children(p))#该算法是递归的并且是从上到下执行的#将会一个一个遍历一次树上的所有节点,不是叶子节点则返回子节点,来找到最深层的叶子节点,类于DFS加暴力
#计算整个树或者一个给定位置作为根节点的子树的高度的Tree.height方法,(直接调用_height2进行封装)defheight(self, p =None):if p isNone:
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