给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6
输出: 6
思路
如果完全二叉树最底层节点没满的话,该完全二叉树的左右两个子树,一定有一个最底层节点没满,另一个是满的
建立一个计算二叉树深度的函数,当左子树的深度等于右子树的深度时,右子树最底层节点没满,否则左子树最底层节点没满
代码
第一名的代码
def countNodes(self, root):
if not root:return 0
l = self.getdepth(root.left)
r = self.getdepth(root.right)
if l==r:return 2**l+self.countNodes(root.right)#2**l是左子树的节点加根节点的数量
else:return 2**r+self.countNodes(root.left)#2**r是右子树的节点加根节点的数量
def getdepth(self,root):
if not root:return 0
else:return self.getdepth(root.left)+1