|
以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 算法理论与分析 』 (http://bbs.xml.org.cn/list.asp?boardid=60) ---- 层序遍历二叉树[原创] (http://bbs.xml.org.cn/dispbbs.asp?boardid=60&rootid=&id=26766) |
|
-- 作者:binaryluo -- 发布时间:1/24/2006 11:35:00 PM -- 层序遍历二叉树[原创] 要求:设计一个算法层序遍历二叉树(同一层从左到右访问)。 我写了一个算法:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。 Status HierarchyBiTree(BiTree T, Status (*Visit)(TElemType e)) { if (T == NULL) return ERROR; //树为空则返回 while (!QueueEmpty(Q)) { // 若队列不空,则层序遍历 if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子进队列 DestroyQueue(Q); // 释放队列空间 算法分析:假设T有n个节点。因为本算法中基本操作是Visit(p->data),则时间复杂度为O(n);由于用一个队列保存当前孩子的节点,所以队列占用的额外空间为该二叉树的叶子节点数,最好情况是一棵只有左分支或只有右分支的单边树,此时占用空间最少,仅为1。最坏情况是该树是满二叉树,此时占用的空间最多为(n+1)/2。 |
|
-- 作者:elfstone -- 发布时间:3/5/2006 2:34:00 PM -- 我以前写的一个层次遍历森林的算法,在此作为补充 void travel_tree(tree t) //tree为森林结构 { tree tmp=t; while(tmp!=NULL) { visite_tnode(tmp); // visite_tnode为访问树结点函数,主要是打标记 if(tmp->firstson!=NULL) seqqueue_enqueue(s,tmp->firstson); //入队 while(tmp->nextbrother!=NULL) { tmp=tmp->nextbrother; //兄弟节点不为空就访问兄弟节点 visite_tnode(tmp); if(tmp->firstson!=NULL) //同时保存该节点的第一个子节点 seqqueue_enqueue(s,tmp->firstson); } seqqueue_outqueue(s,tmp); //一层(一枝)结束后,由队列中拿到下一层(一枝)的节点 } }
|
|
-- 作者:detivoli -- 发布时间:3/17/2006 12:21:00 PM -- 算法设计一直没有很好的学习,以前上DA的时候,老师说层次遍历不是太重要,也没怎么去看,自己也没认真看过. 还好,能够看懂! |
|
-- 作者:bigqueues -- 发布时间:4/27/2006 6:11:00 PM -- 呵呵,顶一个 |
|
-- 作者:LEAGUE -- 发布时间:8/10/2006 1:58:00 PM -- ding~~~~~~~~~~ |
|
-- 作者:wnn349308824 -- 发布时间:9/9/2006 11:49:00 PM -- 广搜 |
|
-- 作者:sjx19871109 -- 发布时间:4/17/2008 12:08:00 PM -- 顶一个 刚学数据结构,一直不太清楚队列的用途,现在终于看到了,谢谢! |
|
-- 作者:netjian -- 发布时间:4/28/2008 10:42:00 PM -- 对于某些搜索,如赫夫曼树,层序遍历是非常重要的。 |
|
-- 作者:冬天的农夫 -- 发布时间:4/30/2008 3:13:00 PM -- 你写这个代码要说明什么问题???????//
|
|
-- 作者:lxztju -- 发布时间:5/1/2008 10:56:00 AM -- 有参考价值 |
|
-- 作者:elegant87 -- 发布时间:11/6/2008 5:47:00 PM -- 学习了!谢谢分享! |
|
-- 作者:popozhu -- 发布时间:11/13/2008 10:13:00 PM -- 看看…… |
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
187.500ms |