CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

二叉树

楼主19830711(为你守候)2003-12-02 10:44:11 在 C/C++ / C语言 提问

编写在二叉链表存储结构下二叉树的按层遍历算法 问题点数:20、回复次数:9Top

1 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-12-02 10:50:10 得分 0

树是特殊的图,直接利用广度优先搜索。Top

2 楼oyxiaoyu0(小雨仔)回复于 2003-12-02 11:33:43 得分 0

先续便利后序等等都可以了~  
  func(node*)  
  {  
          while(node   !=   null   )  
          {  
          visit(root);  
          func(root.left);  
          func(root.right);  
          }  
  }  
  大体上就是这样的思路吧Top

3 楼hqulyc((vc++++++++...死循环了))回复于 2003-12-02 16:59:03 得分 3

编写在二叉链表存储结构下二叉树的按层遍历算法  
  ------------  
   
  用队列实现,    
    PushQ(q,bt);  
    while(!QueueEmpty(Q))  
  {      
        PopQ(Q,p);  
        if(p!=NULL)  
        {  
              cout<<p->data;//访问p结点  
              PushQ(q,p->lchild);  
              PushQ(q,p->rchild);  
        }  
  }  
  思路大概是这样的,希望对你有帮助Top

4 楼likangnian0128(while(1);)回复于 2003-12-04 10:25:09 得分 0

回复人:   hqulyc(无声)   (   )   信誉:100     2003-12-02   16:59:00     得分:0    
     
  用队列实现,   PushQ、PopQ  
   
  ——————————————————————————————————————————  
   
  队列的入队、出队操作被命名为push、pop容易引起人的误解(反正我第一眼看到的感觉就是:为什么要用堆栈?)  
   
  队列的操作命名中,入队用enqueue,出队用dequeue比较直观。  
   
     
     
  Top

5 楼lj1006(正在学习VC……)回复于 2003-12-05 01:20:26 得分 0

以中序为例,就是递归的   思想  
  void   Inorder(BSTNode*   BST)  
  {       //if(BST==NULL)     cout<<"无记录!";    
   
          if(BST!=NULL)    
  {  
          Inorder(BST->left);  
          cout<<BST->data<<endl;  
          Inorder(BST->right);      
  }      
   
  }Top

6 楼lj1006(正在学习VC……)回复于 2003-12-05 01:22:16 得分 0

void   Inorder(BSTNode*   BST)  
  {        
          if(BST!=NULL)    
  {  
          Inorder(BST->left);  
          cout<<BST->data<<endl;  
          Inorder(BST->right);      
  }      
   
  }  
  Top

7 楼lj1006(正在学习VC……)回复于 2003-12-05 01:23:03 得分 2

补充:struct   BSTNode   {  
        ElemType   data;  
              BSTNode*   left;  
              BSTNode*   right;  
      };Top

8 楼hqulyc((vc++++++++...死循环了))回复于 2003-12-07 19:46:56 得分 0

likangnian0128(while(1);):确实用你那个比较直观,我只是大概记得思路而已,Top

9 楼Sodier(逍遥神剑)回复于 2003-12-08 02:35:35 得分 15

void   Broadbs(Nodeptr   root)  
  {  
  Nodeptr   queue[MAX];//用数组实现循环队列  
  int   head,tail;//队列的头和尾  
  Nodeptr   p;  
  head=tail=-1;  
  queue[++tail]=root;//根节点先入队  
  while(tail-head==-1)//判断队列是否为空,即头在尾的后面  
  {  
  head=(head+1)%MAX;//头指针后移  
  r=queue[head];//出对  
  visist(r);//访问  
  if(r->left)//如果有左孩子则入队  
  {  
  p=r->left;  
  tail=(tail+1)%MAX;//实现循环,可以不用取模,但数组必须足够大  
  queue[tail]=p;  
  }  
  if(r->right)//如果有右孩子则入队  
  {  
  p=r->right;  
  tail=(tail+1)%MAX;  
  queue[tail]=p;  
  }  
  }  
  }  
  Top

相关问题

  • 二叉树
  • 二叉树
  • 二叉树遍历
  • 请问二叉树.....
  • 二叉树映象
  • 二叉树映象
  • 二叉树映象
  • 二叉树映象
  • 二叉树问题
  • 二叉排序树

关键词

  • root
  • null
  • 叉
  • pushq
  • 队列
  • tail
  • 树
  • func
  • 实现
  • 就是

得分解答快速导航

  • 帖主:19830711
  • hqulyc
  • lj1006
  • Sodier

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo