| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5260 人关注过本帖
标题:如何判断完全二叉树
只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
设置时间戳,判断

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-10-17 21:23
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
写出代码还需要继续斟酌...

[[it] 本帖最后由 geninsf009 于 2008-10-17 22:21 编辑 [/it]]
2008-10-17 21:42
geninsf009
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:613
专家分:95
注 册:2008-8-16
收藏
得分:0 
missiyou兄高见,高见啊~!
[bo][un]missiyou[/un] 在 2008-10-16 19:23 的发言:[/bo]

感觉用数组映射一下结构树。然后遍历数组,如果数组中没有空就可说明它是满的。
呵呵,其实还有其它算法 好像书上有,我忘了,所以想了这个了法。


missiyou兄高见,高见啊~!这个方法不错,我已经按照你的思路把代码写好了,已经测试通过了,
代码如下:
//////////////////////////////////////////////////
//IsCompleteBinTree()公有成员函数
//判断一棵二叉树是否是完全二叉树
//////////////////////////////////////////////////
template<class T>
bool BinaryTree<T>::IsCompleteBinTree()
{
    LinkedQueue<BinTreeNode<T>*> LQ;     //层次遍历用的队列
    LQ.EnQueue(root);                    //根结点入队列
    BinTreeNode<T>* ptr;                 //游标指针
    int flag=0;                          //0表示遍历的前个结点是数据1:表示前个是空
    while(!LQ.IsEmpty())
    {
        LQ.DeQueue(ptr);                 //从队列中取出一个元素
        
        if(ptr!=NULL)
        {
            if(flag==1)                  //如果当前是数据节点但前个是空
                return false;            //说明不是完全二叉树
            LQ.EnQueue(ptr->leftChild);  //如果是空指针也可以压入队列的
            LQ.EnQueue(ptr->rightChild);
        }
        else
            flag=1;
    };
    return true;
};
///////////////////////IsCompleteBinTree()函数结束

我觉得时间复杂度并不坏,这个利用的是层次遍历,只是多把其中一些结点的空指针也压入队列了,
时间复杂度在最坏的情况下是o(2*n+1),还好是线性关系的...
2008-10-17 22:52
很远的那颗星
Rank: 2
等 级:新手上路
威 望:4
帖 子:544
专家分:0
注 册:2008-6-30
收藏
得分:0 
[bo][un]multiple1902[/un] 在 2008-10-17 21:21 的发言:[/bo]


你好,那叫满二叉树。


你好,我错了
BS一下自已..

Fighting~~~~~~~~
2008-10-18 00:25
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
[quote][bo][un]很远的那颗星[/un] 在 2008-10-17 21:10 的发言:[/bo]


详细一点嘛~~~
[quote]
奇怪,昨天明明写了的啊。
层次遍历,出现结点有空孩子就设置标记,如果之后出现某结点有子结点则说明不是完全二叉树。

倚天照海花无数,流水高山心自知。
2008-10-18 12:42
快速回复:如何判断完全二叉树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016427 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved