您的位置:首页 > 编程语言 > Python开发

二叉树问题---统计完全二叉树的节点个数

2017-08-11 23:46 771 查看
【基本思路】

  可以利用完全二叉树的性质,首先判断头节点的右子树的最左节点是否和头节点的最左节点在同一层。

  如果在的话,说明头节点的左子树是一棵满二叉树,可以用公式计算出左子树的节点个数,再加上头节点,也就是(2^h-1)+1,接下来再计算右子树的个数,可以用递归的方式求出来。

  同理,如果头节点的右子树的最左节点和头节点的最左节点不在同一层,则右子树是一棵满二叉树,可以用公式计算出右子树的节点个数,再加上头节点,也就是(2^(h-1)-1)+1,接下来再计算左子树的个数,可以用递归的方式求出来。

#python3.5
#统计完全二叉树的节点个数
def nodeNum(head):
def getHeight(head, level):
while head:
level += 1
head = head.left
return level-1

def bs(head, level, height):
if level == height:
return 1
h = getHeight(head.right, level+1)
if h == height:       #注意位运算符的优先级小于四则运算
return (1 << (height-level)) + bs(head.right, level+1, height)
else:
return (1 << (height-level-1)) + bs(head.left, level+1, height)

if head == None:
return 0
height = getHeight(head, 1)
return bs(head, 1, height)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 python