- 肉眼
- 顺序表储存
完全二叉树的每个结点按层次遍历顺序从1编号至n,所以当1 ~ n有某一项为空时则不为完全二叉树,时间复杂度O(n)。 - 链表储存
受顺序表储存的启发,在树结点结构中添加一数据域,记录当前结点编号。编号在建树时不难确定,根节点编号为1,插入结点时,若父亲结点编号为i,则左儿子编号为2*i,右儿子为2*i+1。随后进行一次层次遍历,若已遍历结点数+1不等于当前队首结点编号,则不为完全二叉树,时间复杂度O(n)。此法由于添加了编号,使结点删除操作受到限制,所以在不涉及删除操作的情况下此法比较容易实现。
一般情况下的判定方法也不难,网上流传的是先要对二叉树进行层次遍历,在遍历过程中对每一个结点进行检查:
时间复杂度同样为O(n),但没有对树的维护造成麻烦。
(1)如果当前结点没有右子树,则剩下的全部结点必须既没有左子树,又没有右子树;
(2)如果当前结点有右子树,则它必须也有左子树.
如果同时满足(1)(2),则是完全二叉树;否则不是. - 相信还有更好的方法,这学期的核心即是学习强大的二叉树。
2008年12月6日星期六
完全二叉树的一些判定方法
订阅:
博文评论 (Atom)
没有评论:
发表评论