题解 | #完全二叉树结点数#
完全二叉树结点数
https://www.nowcoder.com/practice/512688d2ecf54414826f52df4e4b5693
#coding:utf-8
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head TreeNode类
# @return int整型
#
class Solution:
def nodeNum(self , head ):
# write code here
#两步:
#定义递归函数功能:获取每个结点作为根的二叉树节点个数
#先得到当前结点head的左右子树高度,根据左右子树高度分情况:
#情况1:左子树高度大于右子树高度,即当前结点head的右子树是满二叉树
# 总的结点数 = 根节点 + 满二叉树节点个数(右子树) + 完全二叉树节点个数(左子树)
#情况2:左右子树高度相同,即当前结点head的左子树是满二叉树
#总的结点数 = 根节点 + 满二叉树节点个数(左子树) + 完全二叉树节点个数(右子树)
if head == None:
return 0
left = self.getHeight(head.left)
right = self.getHeight(head.right)
if left != right:
return 1 + pow(2, right) - 1 + self.nodeNum(head.left)
else:
return 1 + pow(2, left) - 1 + self.nodeNum(head.right)
def getHeight(self, node):
height = 0
while node != None:
height += 1
node = node.left
return height