222. 完全二叉树的节点个数
每日几道leetcode刷刷题!
传送门
本题参考【代码随想录】
题目描述
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
代码
if not root:
return 0
left = root.left
right = root.right
leftHeight = rightHeight = 0 #这里初始为0是有目的的,为了下面求指数方便
while left: #求左子树的深度
left = left.left
leftHeight += 1
while right: #求右子树的深度
right = right.right
right += 1
if leftHeight == rightHeight:
return (2 << leftHeight) - 1 #注意(2<<1) 相当于2^2,所以leftHeight初始为0
return self.countNodes(root.left) + self.countNodes(root.right) + 1
总结
满二叉树的节点数:2^树深度 - 1 ,
将完全分别递归左孩⼦,和右孩⼦,递归到某⼀深度⼀定会有左孩⼦或者右孩⼦为满⼆叉树,然后依然可以
按照情况1来计算