博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
创建二叉树算法
阅读量:6649 次
发布时间:2019-06-25

本文共 1470 字,大约阅读时间需要 4 分钟。

根据括号次序创建二叉树,字符串如char Stra[30]="A(B(D(,G)),C(E,F))";

基本思路:

如果是非(,),则创建一个节点(对于书为空时,将其设为根节点,非空时,如果其前一个字符时(,则讲其插入前一个字符的左孩子中,如果是,,插入右孩子中。)。

对于"(",","可以忽略字符,但保留标记,以用于下一个字符的插入。")"标志着当前栈节点左右孩子都插满了,所以可将其产出。

具体代码如下(PAGES201):

#include 
#include
const int MaxSize=40;struct BTNode{ char date; BTNode* Leftchild; BTNode* Rightchild;};void createBTNode(BTNode *&b, char *str){ BTNode *St[MaxSize];int top=-1; int j=0; b=NULL; BTNode *p=NULL; char ch=str[j]; int k=0; while(ch!='\0') { switch (ch) { case '(': top++;St[top]=p; k=1;break; case ',': k=2;break; case ')': top--;break; default: p=(BTNode*)malloc(sizeof(BTNode)); p->Leftchild=NULL;p->Rightchild=NULL;p->date=ch; if (b==NULL) { b=p; } else switch (k) { case 1: St[top]->Leftchild=p;break; case 2: St[top]->Rightchild=p;break; } } ch=str[++j]; }}void PREOrder(BTNode* T){ if (T!=NULL) { printf("%c\n",T->date); PREOrder(T->Leftchild); PREOrder(T->Rightchild); }}int main(){ char Stra[30]="A(B(D(,G)),C(E,F))"; BTNode *Root; createBTNode(Root,Stra); PREOrder(Root);}

 

 

转载于:https://www.cnblogs.com/lisongfeng9213/p/3426007.html

你可能感兴趣的文章
usb host和usb device
查看>>
kickstrt脚本for cobbler基于system-config-kickstart配置
查看>>
【Linux】双向重导向命令tee
查看>>
git 修改历史提交信息
查看>>
PHP修改图片
查看>>
ActionBar自己定义改动无效解决方法
查看>>
设计模式总结篇系列:外观模式(Facade)
查看>>
多谋而少决
查看>>
省市区级联选择
查看>>
Hyper-V虚机跨NUMA节点性能影响
查看>>
spring配置,spring中的bean 的id不能相同
查看>>
Swift语言指南(七)--语言基础之布尔值和类型别名
查看>>
与机房收费系统重相见
查看>>
Spark核心概念
查看>>
百度究竟是哪国的公司
查看>>
netstat命令
查看>>
杂谈---一个人的两种心理
查看>>
赣南师范学院数学竞赛培训第06套模拟试卷参考解答
查看>>
DropDownList中显示无限级树形结构
查看>>
关于Android界面编程与视图(View)组件
查看>>