222. 完全二叉树的节点个数
给出一个完全二叉树,求出该树的节点个数。
说明:
完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。
今天算是学了一个知识点,用二进制的方式表示完全二叉树的索引,利用这个性质可以查找某索引是不是完全二叉树的根节点索引,Python代码如下(参考官方解法):
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def countNodes(self, root: TreeNode) -> int:
def nodeExit(root,level,mid):
bites=1<<(level-1)
tmpNode=root
while(tmpNode and bites):
if (mid & bites) is 0:
tmpNode=tmpNode.left
else:
tmpNode=tmpNode.right
bites=bites>>1
return tmpNode!=None
if not root: return 0
level,tmpNode=0,root
while(tmpNode.left):
level+=1
tmpNode=tmpNode.left
low=1<<level
high=(1<<(level+1))-1
while(low<high):
mid=int((high-low+1)/2+low)
if nodeExit(root,level,mid):
low=mid
else:
high=mid-1
return low
运行效果:
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-complete-tree-nodes