1、题目描述
https://leetcode-cn.com/problems/count-complete-tree-nodes/
给出一个完全二叉树,求出该树的节点个数。
完全二叉树的定义如下:除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
2、代码详解
比较左子树和右子树之间的深度
- A.如果相等,则表示左子树是完整的二叉树
- B.不是,这意味着右边的子树是完整的二叉树
# 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 countNodes(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
left_depth = self.get_depth(root.left)
right_depth = self.get_depth(root.right)
if left_depth == right_depth:
return pow(2, left_depth) + self.countNodes(root.right)
else:
return pow(2, right_depth) + self.countNodes(root.left)
def get_depth(self, root):
if not root:
return 0
return 1 + self.get_depth(root.left)