完全二叉树和满二叉树的区别

本文详细解析了满二叉树与完全二叉树的概念与区别,满二叉树为每一层都是完全填充的二叉树,而完全二叉树则允许最后一层不完全填充,但必须向左连续填充。文中还提供了两种二叉树的节点数计算公式。

                                                         完全二叉树和满二叉树的区别

二叉树分类很多,其中满二叉树和完全二叉树又有点特殊,这两种二叉树的效率又有点高,以下是它们的区别:

满二叉树:从形象来看的话满二叉树是一个绝对的三角形,最后一层全部是叶子节点,其它各层是非叶子节点,节点数的计算n=2^k - 1,k表示深度,也就是层数,第i层的节点数n= 2^(i- 1),它的节点数是一系列固定的数,如果节点数不是序列中的数的话,就不是满二叉树。

完全二叉树:完全二叉树的节点数是任意的,从形式上讲它是个缺失的的三角形,但所缺失的部分一定是右下角某个连续的部分,最后那一行可能不是完整的,对于k层的完全二叉树,节点数的范围2^ (k - 1) -1 < N< 2^k - 1;

完全二叉树满二叉树是两种不同类型的二叉树,它们的区别如下: ### 节点分布 - **完全二叉树**:所有节点只存在3种情况,即有左右2个孩子、只有左孩子、没有孩子(叶节点),不存在只有右孩子的情况。采用层序遍历的方式遍历节点,当遍历到某一个节点,它只有左孩子,或者没有孩子,则后续所有节点一定都是叶节点[^1]。 - **满二叉树**:每一层上的所有节点都有两个子节点,并且所有的叶子节点都在同一层上。 ### 树的深度与节点数量关系 - **完全二叉树**:深度为 $h$ 的完全二叉树,其节点数 $n$ 满足 $2^{h - 1}\leq n< 2^{h}- 1$。 - **满二叉树**:深度为 $h$ 的满二叉树,其节点数 $n$ 满足 $n = 2^{h}- 1$。 ### 结构完整性 - **完全二叉树**:在满足节点分布规律的前提下,允许部分层的节点不满。 - **满二叉树**:是一种高度完整的二叉树,每一层的节点都是满的。 ### 代码示例 下面是判断一个二叉树是否为完全二叉树满二叉树的 Python 代码示例: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def is_complete_tree(root): if not root: return True queue = [root] flag = False # 标记是否遇到过只有左孩子或没有孩子的节点 while queue: node = queue.pop(0) if node.left: if flag: return False queue.append(node.left) else: flag = True if node.right: if flag: return False queue.append(node.right) else: flag = True return True def is_full_tree(root): if not root: return True if not root.left and not root.right: return True if root.left and root.right: return is_full_tree(root.left) and is_full_tree(root.right) return False ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值