新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 研友的交流园地,讨论关于计算机考研的方方面面。
    [返回] 计算机科学论坛计算机理论与工程『 计算机考研交流 』 → 刚做了06年数据结构,感觉不是很难  不知道是不是自己想简单了[求助] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7773 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 刚做了06年数据结构,感觉不是很难  不知道是不是自己想简单了[求助] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     cauzcw 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:38
      积分:232
      门派:XML.ORG.CN
      注册:2006/8/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cauzcw发送一个短消息 把cauzcw加入好友 查看cauzcw的个人资料 搜索cauzcw在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看cauzcw的博客楼主
    发贴心情 刚做了06年数据结构,感觉不是很难  不知道是不是自己想简单了[求助]

    比如算法辨析题   下面是一个对树/森林结构进行处理的算法  传入森林的第一棵树的根节点root,
    调用Print(root),是否可以打印森林的所有结点?如果你认为可以,请简要说明理由。如果你认为不可以,请在此算法框架的基础上改写出一个可以打印森林的新算法。
    Template <class T>
    void Tree<Elem>::Print(TreeNode<T>*tr){
     if(rt==NULL)
      return;
    Visit(rt);    //例如,cout<<rt->value()<<”\n”;
    for(TreeNode *tmp=rt->LeftMostChild();tmp!=NULL;tmp=tmp->RightSibling())
     Print(tmp);
    }

    我做的   多引入一个参数tmp2  是不是就可以了   大家说说看
    Template <class T>
    void Tree<Elem>::Print(TreeNode<T>*tr){
     if(rt==NULL)
      return;
    Visit(rt);    //例如,cout<<rt->value()<<"\n";
    for(TreeNode *tmp=rt->LeftMostChild();tmp!=NULL;tmp=tmp->RightSibling())

    TreeNode *tmp2= tmp;
     Print(tmp2);
    }


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    http://www.ieee.org.cn/dispbbs.asp?boardID=67&ID=45071

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 0:24:00
     
     cauzcw 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:38
      积分:232
      门派:XML.ORG.CN
      注册:2006/8/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cauzcw发送一个短消息 把cauzcw加入好友 查看cauzcw的个人资料 搜索cauzcw在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看cauzcw的博客2
    发贴心情 
    确实是自己想简单了   它那算法根本打印不了整个森林  太大意了

    ----------------------------------------------
    http://www.ieee.org.cn/dispbbs.asp?boardID=67&ID=45071

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 0:42:00
     
     albani 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(汇编考了97分!)
      文章:89
      积分:500
      门派:XML.ORG.CN
      注册:2007/7/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给albani发送一个短消息 把albani加入好友 查看albani的个人资料 搜索albani在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看albani的博客3
    发贴心情 
    Template <class T>
    看看这个行么?
    void Tree<Elem>::Print(TreeNode<T>*tr){
    if(rt==NULL)
      return;
    Visit(rt);    //例如,cout<<rt->value()<<”\n”;
    Print(rt->LeftMostChild());
    Print(rt->RightSibling());
    }
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 10:26:00
     
     蝶影 美女呀,离线,快来找我吧!狮子座1985-8-1
      
      
      威望:1
      等级:大四(总算啃完XML规范了)
      文章:183
      积分:1291
      门派:IEEE.ORG.CN
      注册:2006/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给蝶影发送一个短消息 把蝶影加入好友 查看蝶影的个人资料 搜索蝶影在『 计算机考研交流 』 的所有贴子 点击这里发送电邮给蝶影 引用回复这个贴子 回复这个贴子 查看蝶影的博客4
    发贴心情 
    楼上的算法可以实现打印,不过比较符合二叉树的习惯

    template<class T>
    void Tree<Elem>::Print(TreeNode<T>*tr)
    {while(rt!=NULL)
    {Visit(rt);    //例如,cout<<rt->value()<<”\n”;
      Print(rt->LeftMostChild());
      rt=rt->RightSibling();
    }
    }
    这样比较符合森林的特点.

    [此贴子已经被作者于2007-7-29 15:23:15编辑过]

    ----------------------------------------------
    不许偷懒~!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 14:51:00
     
     蝶影 美女呀,离线,快来找我吧!狮子座1985-8-1
      
      
      威望:1
      等级:大四(总算啃完XML规范了)
      文章:183
      积分:1291
      门派:IEEE.ORG.CN
      注册:2006/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给蝶影发送一个短消息 把蝶影加入好友 查看蝶影的个人资料 搜索蝶影在『 计算机考研交流 』 的所有贴子 点击这里发送电邮给蝶影 引用回复这个贴子 回复这个贴子 查看蝶影的博客5
    发贴心情 
    题目给的代码只能打印第一棵树

    Template <class T>
    void Tree<Elem>::Print(TreeNode<T>*tr)
    {if(rt==NULL)
      return;
    Visit(rt);    //例如,cout<<rt->value()<<”\n”;
    Print(tr->LeftMostChild());
    for(TreeNode *tmp=rt->RightSibling();tmp!=NULL;tmp=tmp->RightSibling())
        Print(tmp);
    }

    这样也行吧?

    ----------------------------------------------
    不许偷懒~!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 15:35:00
     
     albani 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(汇编考了97分!)
      文章:89
      积分:500
      门派:XML.ORG.CN
      注册:2007/7/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给albani发送一个短消息 把albani加入好友 查看albani的个人资料 搜索albani在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看albani的博客6
    发贴心情 
    4楼应该正确
    5楼我觉得会重复打印

    比如说根节点root,循环会访问他的全部兄弟,
    到他的右兄弟时,右兄弟又会循环,就访问右兄弟的全部靠右的兄弟。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 18:48:00
     
     shuimu 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:27
      积分:149
      门派:XML.ORG.CN
      注册:2007/3/19

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给shuimu发送一个短消息 把shuimu加入好友 查看shuimu的个人资料 搜索shuimu在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看shuimu的博客7
    发贴心情 题目代码连第一棵树也无法打印吧?
    我觉得题目的代码连第一棵树也不能打印
    如果说这颗树中有一个结点没有子女,LeftMostchild==NULL,那么他的所有兄弟结点也将
    不能进行打印,至此也将停止打印
    4楼的while改为if即可,5楼的算法正确(我觉得应该是最佳答案,不会重复)
    对吧?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 19:03:00
     
     蝶影 美女呀,离线,快来找我吧!狮子座1985-8-1
      
      
      威望:1
      等级:大四(总算啃完XML规范了)
      文章:183
      积分:1291
      门派:IEEE.ORG.CN
      注册:2006/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给蝶影发送一个短消息 把蝶影加入好友 查看蝶影的个人资料 搜索蝶影在『 计算机考研交流 』 的所有贴子 点击这里发送电邮给蝶影 引用回复这个贴子 回复这个贴子 查看蝶影的博客8
    发贴心情 
    1.4楼的while改为if即可
      不能改成if,因为这个循环是替代Print(rt->RightSibling());这个语句实现递归效果的.
    2.比如说根节点root,循环会访问他的全部兄弟,
       到他的右兄弟时,右兄弟又会循环,就访问右兄弟的全部靠右的兄弟。
       就是这样实现周游的啊,访问完左孩子(也就访问完一棵树或者子树),下降到右链(到另一棵树或者子树的树根),再访问这个结点的左孩子,再下降到这个结点右链
    3.如果说这颗树中有一个结点没有子女,LeftMostchild==NULL,那么他的所有兄弟结点也将
       不能进行打印,至此也将停止打印
       如果一个结点没有子女,不打印的是这个结点LeftMostChild的右链,但是会打印这个结点的右链啊,这个是个循环里递归的过程,在递归里面那层的循环是空,在外面那层循环要是不是空,还会按照外面那层继续走的

    ----------------------------------------------
    不许偷懒~!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 21:06:00
     
     蝶影 美女呀,离线,快来找我吧!狮子座1985-8-1
      
      
      威望:1
      等级:大四(总算啃完XML规范了)
      文章:183
      积分:1291
      门派:IEEE.ORG.CN
      注册:2006/5/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给蝶影发送一个短消息 把蝶影加入好友 查看蝶影的个人资料 搜索蝶影在『 计算机考研交流 』 的所有贴子 点击这里发送电邮给蝶影 引用回复这个贴子 回复这个贴子 查看蝶影的博客9
    发贴心情 
    其实我觉得,那两个都是正确的.
    在张铭的视频里一共给出了三种先根周游的框架,就是3楼,4楼和5楼这三种
    只是5楼那种,在张铭的课件里用的是while循环(见下面代码),现在题目给的是for循环,所以我就把那个while改成for了(我应该没改错...)

    张铭课件里给的第三种是:
    template<class T>
    void Tree<T>::Print(TreeNode<T> *root)
    {if(root==NULL)
        return;
    visit(root);
    Print(rt->LeftMostChild());
    TreeNode<T> *temp=root->RightSibling();
    while(temp!=NULL)
      {Print(temp);
       temp=temp->RightSibling();
       }
    }

    ----------------------------------------------
    不许偷懒~!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 21:14:00
     
     cauzcw 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:38
      积分:232
      门派:XML.ORG.CN
      注册:2006/8/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cauzcw发送一个短消息 把cauzcw加入好友 查看cauzcw的个人资料 搜索cauzcw在『 计算机考研交流 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看cauzcw的博客10
    发贴心情 
    5楼强  可以做标准答案了

    ----------------------------------------------
    http://www.ieee.org.cn/dispbbs.asp?boardID=67&ID=45071

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/7/29 21:25:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 计算机考研交流 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/21 8:07:26

    本主题贴数13,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    115.234ms