
解题思路:
1. 对于完全二叉树的判断:不能根据 “ 右孩子存在则左孩子一定存在 ” 的思路去判断所给二叉树是否为完全二叉树
2. 利用 “ 层序遍历 ” 的思路去进行是否为完全二叉树的判断。
遇到NULL后面都是NULL,而遇到 NULL 后面还有非空,则该二叉树不是完全二叉树。遇到非空,后面一定都是非空。符合这样的规律才叫完全二叉树。
即利用了 “ 层序遍历 ” 的遍历特点
3. 以上图中的第二个二叉树为例,模拟用队列实现层序遍历:
首先判断结点是否为空,不为空,
则根结点1先进入到队列中,再将根结点1拿出,
然后使根结点的左右孩子(2,4结点)分别进入队列,
然后将进入的左孩子结点 2 拿出,
拿出后将结点2 的孩子结点(只有一个结点3)进入队列之中,
然后将之前留在队列中的结点4拿出来,
再将结点 4 的孩子结点 5,6 放入队列之中。
再把之前留在队列中的结点 3 拿出来,
再将其结点 7 放进队列之中,
然后将队列中的剩余结点一个接一个拿出再插入其子节点,
注意:
如果其子节点为空,则无需进行插入 *** 作
总结:
即将哪个结点从队列中拿出来,就要把它的子节点都拿进队列中
代码实现:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)