题目描述
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
示例:
输入:
1
/ \
2 3
/ \ /
4 5 6
输出: 6
我的解法——递归(AC)
- 详见《程序员代码面试指南》
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def get_height(self, root):
height = 0
while(root):
height += 1
root = root.left
return height
def countNodes(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if(root == None):
return 0
if(not root.left and not root.right):
return 1
elif(not root.left or not root.right):
return 2
left_height = self.get_height(root.left)
right_height = self.get_height(root.right)
if(left_height == right_height):
return pow(2, left_height) + self.countNodes(root.right)
else:
return pow(2, right_height) + self.countNodes(root.left)