第二章:如何计算完全二叉树的节点数

labuladong 如何计算完全二叉树的节点数

222. 完全二叉树的节点个数

  • 完全二叉树都是紧凑靠左排列
  • 满二叉树每一层都是满的 (除底层的叶子节点外,左右孩子都有),是一种特殊的完全二叉树

遍历二叉树节点时:

  1. 若是普通的二叉树,则在遍历节点时计数即可
  2. 若是满二叉树,则说明左右子树的高度相等,节点个数=2^高度-1

因此,若判断该完全二叉树是满二叉树,则用情况2,否则用情况1

# 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):
        if not root: return 0
        l,r=root,root
        hl,hr=0,0
        while l!=None:
            l=l.left
            hl+=1
        while r!=None:
            r=r.right
            hr+=1
        if hl==hr: # 左右子树高度相等,是满二叉树,用公式计算
            return pow(2,hl)-1
        return 1+self.countNodes(root.left)+self.countNodes(root.right) # 普通二叉树,用递归方法计算

   转载规则


《第二章:如何计算完全二叉树的节点数》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
第二章:特殊数据结构:单调栈 第二章:特殊数据结构:单调栈
labuladong 特殊数据结构:单调栈 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递
2020-08-05
下一篇 
第二章:LRU算法详解 第二章:LRU算法详解
labuladong LRU算法详解 146. LRU(Least Recently Used) 缓存机制 利用字典+双向链表 字典里存的是Node的节点类,self.add(Node(key, value)) 传给add函数的是一个No
2020-08-01
  目录