二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空

简介: /*二叉链表就是以链表为存储结构存储二叉树 ,我么要像编号 完全二叉树一样 存储 普通的二叉树 。 节点的声明如下 node     */#include using namespace std ;typedef struct node{   int data ; node...
 

/* 二叉链表就是以链表为存储结构存储二叉树 ,我么要像编号 完全二叉树一样 存储 普通的二叉树 。 节点的声明如下 node     */ #include <iostream> using namespace std ; typedef struct node {   int data ;  node* lChild ;  node* rChild ; }BTreeNode,*LinkTree ;   

void CreateTree(LinkTree*pTree,int nIndex[],char ch[])   //nIndex是二叉树的节点编号数组  ch是节点数据 每个编号对应一个字符  nIndex 等于0时候结束   ch='#'结束 {   int   i =1 ;//用作下标   int   j ;//当前双亲节点的下标   LinkTree temNode[50] ;//辅助建立二叉链表  BTreeNode *newNode =NULL;//用来指向新分配的节点空间  while(nIndex[i]!=0&&ch[i]!='#')  //如果没有到达最后一个节点  {   newNode=new BTreeNode ;   newNode->data=ch[i]  ;  //为节点赋值   newNode->lChild=newNode->rChild=NULL ;//lChild=rChild=NULL   temNode[nIndex[i]]=newNode ;//将这个新节点保存在辅助节点数组的指定编号为下标的元素中。   if(nIndex[i]==1)  //如果是根节点的话那么我们将这个节点的地址保存在pTree中。   {    *pTree=newNode  ;   }   else   {       j=nIndex[i]/2 ;//获得双亲节点的编号 也就是数组下标    if(nIndex[i]%2==0)       temNode[j]->lChild=newNode ;  //编号基数那么是左子树    else     temNode[j]->rChild=newNode ;  //编号是偶数那么是右子树   }      i++ ;   //索引自加1  }   } void Preorder(LinkTree pTree)  //递归方式实现先序遍历 {     if(pTree!=NULL)  {   cout<<pTree->data<<" " ;   Preorder(pTree->lChild) ;   Preorder(pTree->rChild) ;  }   } void Inorder(LinkTree pTree) //中序遍历 {     if(pTree!=NULL)  {   Inorder(pTree->lChild) ;   cout<<pTree->data<<" " ;   Inorder(pTree->rChild) ;  }   } void Postorder(LinkTree pTree) //后序遍历 {  if(pTree!=NULL)  {   Postorder(pTree->lChild) ;   Postorder(pTree->rChild) ;   cout<<pTree->data<<" ";  } }

void Postorder(LinkTree pTree) //后序遍历 {  if(pTree!=NULL)  {   Postorder(pTree->lChild) ;   Postorder(pTree->rChild) ;   cout<<pTree->data<<" ";  } } 

/*     按照层次进行遍历 需要用到队列     循环队列  思想是把所有的节点进队列  进入队列的节点输出data  然后将这个节点的lChild rChild 不为NULL的孩子节点进入队列 。  进行一个 Rear!=Front的while循环 */ void  Traverse(BTreeNode*pTree) {    BTreeNode* queue[MAX_SIZE] ;   //指针队列数组保存遍历过的节点的指针    BTreeNode*tem=NULL; //临时指针保存出队列的节点    int Front = 0;    int Rear  = 0;    if(pTree!=NULL)  //初始化队尾为树的第一个节点    {    Rear=(Rear+1)%MAX_SIZE;     //队尾+1    queue[Rear]=pTree ;  //节点指针进队尾    }    while(Rear!=Front)    {        Front=(Front+1)%MAX_SIZE ;     tem=queue[Front] ;     cout<<tem->data<<" " ;     if(tem->lChild!=NULL)  //如果出队列的lChild不为空的话 那么进队列     {       Rear=(Rear+1)%MAX_SIZE ;  //lChild进队列      queue[Rear]=tem->lChild ;

    }     if(tem->rChild!=NULL ) //如果出队列的节点的rChild不为空的话 那么进队列     {

           Rear=(Rear+1)%MAX_SIZE ;  //rChild进队列      queue[Rear]=tem->rChild;     }    

   }  

}

 

void main() {     LinkTree pTree ;     int  nIndex[]={9999,1,2,3,4,5,6,7,8,9,0} ;        char ch[]={'?',1,2,3,4,5,6,7,8,9,'#'};     CreateTree(&pTree,nIndex,ch);     cout<<"先序遍历结果:"<<endl ;     Preorder(pTree) ;     cout<<endl ;     cout<<"中序遍历结果:"<<endl ;     Inorder(pTree) ;     cout<<endl ;     cout<<"后续遍历结果:"<<endl ;        Postorder(pTree) ;     cout<<endl ;

ClearTree(&pTree) ;

}


目录
相关文章
|
人工智能 定位技术 API
旅行规划太难做?5 分钟构建智能Agent,集成地图 MCP Server
MCP(Model Coordination Protocol)是由Anthropic公司提出的开源协议,旨在通过标准化交互方式解决AI大模型与外部数据源、工具的集成难题。阿里云百炼平台上线了业界首个全生命周期MCP服务,大幅降低Agent开发门槛,实现5分钟快速搭建智能体应用。本文介绍基于百炼平台“模型即选即用+MCP服务”模式,详细展示了如何通过集成高德地图MCP Server为智能体添加地图信息与天气查询能力,构建全面的旅行规划助手。方案涵盖智能体创建、模型配置、指令与技能设置等步骤,并提供清理资源的指导以避免费用产生。
|
缓存 资源调度 Kubernetes
阿里云云效产品使用合集之如何将两个独立的代码仓库构建并部署到同一个容器内
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
12月前
|
边缘计算 人工智能 5G
5G 组网模式:NSA 与 SA 的比较与应用
5G 组网模式:NSA 与 SA 的比较与应用
3661 1
|
关系型数据库 MySQL 数据库
MySQL:union all与union区别详解
MySQL:union all与union区别详解
333 0
|
SQL Java 数据库连接
系统数据如何跟数据库进行交互?
系统数据如何跟数据库进行交互?
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
前端开发 JavaScript 关系型数据库
koa 搭建一个后台,实现crud, swagger,loger记录等
这么些api接口,然后把swagger也给加上,方便测试和维护api的文档,这也是后端一直需要做的事情,作为前端工程师,咋们虽然写后台代码不多,但是需要知道人家的工作内容是咋样的,参数怎么传递的,这样有利于联调。
koa 搭建一个后台,实现crud, swagger,loger记录等
|
开发工具 iOS开发 git
Mac Homebrew 安装与卸载
Mac Homebrew 安装与卸载
13256 0
|
算法 Linux
字符串-KMP算法
字符串-KMP算法
178 0
2018《软件工程导论》知识点复习【第二章】
2018《软件工程导论》知识点复习【第二章】
187 0
2018《软件工程导论》知识点复习【第二章】