题目描述
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
思路
代码
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
class Solution:
def countNodes(self,root:TreeNode) -> int:
if not root:
return 0
h_l , h_r = 0, 0
curRoot = root
while curRoot.left:
h_l += 1
curRoot = curRoot.left
curRoot = root
if curRoot.right:
h_r += 1
curRoot = curRoot.right
while curRoot.left:
h_r += 1
curRoot = curRoot.left
if h_l == h_r:
sumNodes_l = 2**h_l - 1
sumNodes_r = self.countNodes(root.right)
if h_l == h_r + 1:
sumNodes_l = self.countNodes(root.left)
sumNodes_r = 2**h_r -1
return sumNodes_l + sumNodes_r + 1