二叉树问题---统计完全二叉树的节点个数
2017-08-11 23:46
771 查看
【基本思路】
可以利用完全二叉树的性质,首先判断头节点的右子树的最左节点是否和头节点的最左节点在同一层。
如果在的话,说明头节点的左子树是一棵满二叉树,可以用公式计算出左子树的节点个数,再加上头节点,也就是(2^h-1)+1,接下来再计算右子树的个数,可以用递归的方式求出来。
同理,如果头节点的右子树的最左节点和头节点的最左节点不在同一层,则右子树是一棵满二叉树,可以用公式计算出右子树的节点个数,再加上头节点,也就是(2^(h-1)-1)+1,接下来再计算左子树的个数,可以用递归的方式求出来。
可以利用完全二叉树的性质,首先判断头节点的右子树的最左节点是否和头节点的最左节点在同一层。
如果在的话,说明头节点的左子树是一棵满二叉树,可以用公式计算出左子树的节点个数,再加上头节点,也就是(2^h-1)+1,接下来再计算右子树的个数,可以用递归的方式求出来。
同理,如果头节点的右子树的最左节点和头节点的最左节点不在同一层,则右子树是一棵满二叉树,可以用公式计算出右子树的节点个数,再加上头节点,也就是(2^(h-1)-1)+1,接下来再计算左子树的个数,可以用递归的方式求出来。
#python3.5 #统计完全二叉树的节点个数 def nodeNum(head): def getHeight(head, level): while head: level += 1 head = head.left return level-1 def bs(head, level, height): if level == height: return 1 h = getHeight(head.right, level+1) if h == height: #注意位运算符的优先级小于四则运算 return (1 << (height-level)) + bs(head.right, level+1, height) else: return (1 << (height-level-1)) + bs(head.left, level+1, height) if head == None: return 0 height = getHeight(head, 1) return bs(head, 1, height)
相关文章推荐
- 二叉树中叶子节点的统计和树高问题
- 二叉树节点间的最大距离问题
- LeetCode 222. Count Complete Tree Nodes(完全二叉树节点数统计)
- 【二叉树】DFS统计节点和出现的个数
- 由先序遍历序列和中序遍历序列恢复二叉树以及统计叶子节点个数和树的深度
- 二叉树问题---寻找搜索二叉树中两个错误的节点
- 二叉树中最大最小权值节点距离问题
- 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言
- 九度 1113 关于二叉树节点的个数问题
- 二叉树的最近公共节点问题
- 求二叉树的高度,叶子节点个数,第K层结点个数,求祖先结点问题
- [leetcode-二叉树层次遍历并统计每层节点数]--103. Binary Tree Zigzag Level Order Traversal
- 二叉树的层次遍历,叶子节点的个数,是否为完全二叉树等等
- 第十周项目3-利用二叉树遍历思想解决问题(1)计算二叉树节点个数
- Catalan数—求解n个节点能组成的二叉树个数问题
- 统计二叉树每层节点个数并打印每层节点
- 判断一棵树是否是完全二叉树和求二叉树中两个节点的最近公共祖先——题集(十三)
- 二叉树3(统计二叉树中叶子节点的个数)
- LCA问题:求二叉树中任意两个节点的最近公共祖先
- 统计一个二叉树的每一层 节点个数(队列,递归)