二叉树的创建及遍历
来源:互联网 发布:百度竞价账户如何优化 编辑:程序博客网 时间:2024/06/05 10:15
对任意的二叉树的结点结构都可以设置为如下结构,leftChild指向该结点的左孩子,rightChild指向右孩子,data域记录结点信息,以此结点结构形成的二叉树称为二叉链表。
存储结构类型为
typedef char Elemtype;typedef struct Node{ Elemtype data; struct Node * LChild; struct Node * RChild;}BiTNode,*BiTree;以二叉树的广义表的形式创建,测试用例为"a(b(c,d(e,f)),i(j,k(x,y)))",基本思路是,将每个元素存入结点中,并根据标志变量判断是放入前结点的左孩子还是右孩子,后将‘(’后的结点压入栈中和标志置1,遇到‘)‘则出栈,’,‘则说明下个结点是父结点的右孩子,标志置0,以下为代码
BiTNode *CreateBiTNode(char *str){ char ch;int top=-1,k,j=0; BiTNode *bt=NULL,*stack[200],*p=NULL; ch=str[j]; while(ch!='\0'){ switch(ch){ case '(': top++; stack[top]=p; k=1; break; case ',': k=2; break; case ')': top--; break; default: p=(BiTNode *)malloc(sizeof(BiTNode)); p->data=ch; p->LChild=p->RChild=NULL; if(bt==NULL){ bt=p; }else{ if(k==1){ stack[top]->LChild=p; }else{ stack[top]->RChild=p; } } break; } j++;ch=str[j]; } return bt;}
遍历分为先中后序遍历,思想都差不多,就直接贴出前序遍历测试代码
#include<stdio.h>typedef char Elemtype;typedef struct Node{ Elemtype data; struct Node * LChild; struct Node * RChild;}BiTNode,*BiTree;BiTNode *CreateBiTNode(char *str){ char ch;int top=-1,k,j=0; BiTNode *bt=NULL,*stack[200],*p=NULL; ch=str[j]; while(ch!='\0'){ switch(ch){ case '(': top++; stack[top]=p; k=1; break; case ',': k=2; break; case ')': top--; break; default: p=(BiTNode *)malloc(sizeof(BiTNode)); p->data=ch; p->LChild=p->RChild=NULL; if(bt==NULL){ bt=p; }else{ if(k==1){ stack[top]->LChild=p; }else{ stack[top]->RChild=p; } } break; } j++;ch=str[j]; } return bt;}//前序遍历void Preorder(BiTNode *bt){ if(bt!=NULL){ printf("%c",bt->data); Preorder(bt->LChild); Preorder(bt->RChild); }}int main(){ BiTNode *bt=NULL; char *str="a(b(c,d(e,f)),i(j,k(x,y)))"; bt=CreateBiTNode(str); Preorder(bt);}
0 0
- 二叉树的创建及遍历方式
- 二叉树的创建及遍历
- 链式二叉树的创建及遍历
- 链式二叉树的创建及遍历
- 二叉树的创建及遍历
- 二叉树的创建,及遍历 操作
- 二叉树的创建及遍历
- 二叉树的创建及遍历实现
- 二叉树的创建及遍历
- 二叉树的创建及遍历
- 二叉树的创建及遍历
- 二叉查找树的创建及遍历
- 二叉树的创建及遍历
- 二叉树的创建及遍历
- 二叉树的创建及遍历
- 二叉树创建及遍历
- 二叉树创建及遍历
- 二叉树创建及遍历
- python 正则RE
- centos 7 密码忘记 如何进入修改
- SQL Server自增长列插入指定值教程
- wstring与string互转
- 影子模型(Java篇)
- 二叉树的创建及遍历
- Android 开发一定要看的15个实战项目
- delete运算符(删除对象)
- 关于近期遇到的坑-SurfaceView,RecylerView等
- Oracle命令脚本
- ORA-03113: end-of-file on communication channel
- 图解HTTP笔记之第四章:HTTP状态码
- js小技巧集合
- 最大似然损失和交叉熵损失函数的联系