poj1577Falling Leaves--二叉排序树
来源:互联网 发布:刘文展 举报事件知乎 编辑:程序博客网 时间:2024/06/13 09:08
题目大意:给出一系列字串,最后一个是树根,建立一颗二叉排序树,先序输出二叉排序结果。
方法一:数组存储二叉树
#include<cstdio> #include<cstring> #include<iostream> using namespace std; struct node { int lc, rc; char data; }tree[100]; char str[100]; int num; void insert(int p,char data) //插入节点{ if(tree[p].data==0){ tree[p].data=data; return ; } else if(tree[p].data<data){ if(!tree[p].rc) tree[p].rc=++num; insert(tree[p].rc,data); } else { if(!tree[p].lc) tree[p].lc=++num; insert(tree[p].lc,data); } } void dlr(int p) //先根遍历{ if(tree[p].data==0) return; printf("%c",tree[p].data); if(tree[p].lc) dlr(tree[p].lc); if(tree[p].rc) dlr(tree[p].rc); } int main() { while(scanf("%s",str)>0){ int len=strlen(str); char ch; num=1; //数组序号,模拟指针 memset(tree,0,sizeof(tree)); for(; ;) { scanf("%c",&ch); if(ch>='A'&&ch<='Z') str[len++]=ch; else if(ch=='*'||ch=='$') break; } for(int i=len-1;i>=0;i--) insert(1,str[i]); dlr(1); printf("\n"); if(ch=='$') break; } return 0; }
方法二,指针
#include<cstdio> #include<cstring> #include<iostream> using namespace std; struct node { char data; node *lc,*rc; }*tree; char str[100]; void insert(node * &p,char data) { //注意这里参数的传递,tree是树的根节点, //这里参数传递用了参数的地址传递,p与tree共同指向同一个地址空间 if(p==NULL){ node *q=new node; q->data=data; q->lc=q->rc=NULL; p=q; return; } else { if(p->data<data) insert(p->rc,data); else insert(p->lc,data); }} void dlr(node *p) { if(p==NULL) return; printf("%c",p->data); dlr(p->lc); dlr(p->rc); } int main() { freopen("in.txt","r",stdin); while(scanf("%s",str)>0) { int len=strlen(str); char ch; for(; ;) { scanf("%c",&ch); if(ch>='A'&&ch<='Z') str[len++]=ch; else if(ch=='*'||ch=='$') break; } tree=NULL; for(int i=len-1;i>=0;i--) insert(tree,str[i]); dlr(tree); printf("\n"); if(ch=='$') break; } return 0; }
插入也可以用带返回值的函数
node *insert(node*p,char data) { if(p==NULL){ node *q=new node; q->data=data; q->lc=q->rc=NULL; return q; } else { if(p->data<data) p->rc=insert(p->rc,data); else p->lc=insert(p->lc,data); return p; }}
引用函数的用法:
tree=NULL; for(int i=len-1;i>=0;i--) tree=insert(tree,str[i]); //要赋值回来,要不tree还是null
0 0
- poj1577Falling Leaves--二叉排序树
- poj1577~Falling Leaves~二叉排序树~
- poj1577 Falling Leaves 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- file结构
- Linux下date命令,格式化输出,时间设置
- ArrayUtils
- Linux中查看二进制文件
- Android线程问题
- poj1577Falling Leaves--二叉排序树
- PCB设计之——补泪滴
- Android换肤之——插件换肤
- JQuery中DOM事件合成用法实例分析
- iOS解决两个静态库的冲突 duplicate symbol
- linux下离线更新nessus漏洞插件的方法
- APKTool使用方法
- blob类型转字符串
- 你不得不知道的:关于TnPM的定位问题