九度1009判断两个序列构成的两个二叉排序树是否相同
2013-09-21 18:14
330 查看
此程序中,实现用递归构造二叉排序树,以前递归一直构造不成功,仔细看看书,发现是函数传送参数的时候,不能传送指向结点的指针,若这样只能改变此指针指向内容,而无法改变此指针,但是递归构造时,当函数接受的参数为NULL时,要分配空间,把这个新空间的指针值赋给传过来的指针,所以传送参数时要传指针的指针,这样就不仅可以改变指针指向的能容,也能改变这个指针,这样就顺利生成新的结点。
本题思路:分别根据序列构造排序树,对比这两棵树的前序序列和中序序列,若都相同则这两颗二叉树相同
本题思路:分别根据序列构造排序树,对比这两棵树的前序序列和中序序列,若都相同则这两颗二叉树相同
#include<stdio.h> #include<string.h> typedef struct NODE { char data; struct NODE *lc,*rc; }node; typedef node * nodeptr; int pos; void insertNode(nodeptr *treeptr,char value) { if((*treeptr)==NULL) { (*treeptr)=malloc(sizeof(node)); (*treeptr)->data=value; (*treeptr)->lc=NULL; (*treeptr)->rc=NULL; }else if(value<(*treeptr)->data) insertNode(&((*treeptr)->lc),value); else if(value>(*treeptr)->data) insertNode(&((*treeptr)->rc),value); } void createBT(node **root,int num,char x[]) { int i; for(i=0;i<num;i++) insertNode(root,x[i]); } void preOrder(node *T,char x[]) { if(T!=NULL) { x[pos++]=T->data; preOrder(T->lc,x); preOrder(T->rc,x); } } void inOrder(node *T,char x[]) { if(T!=NULL) { inOrder(T->lc,x); x[pos++]=T->data; inOrder(T->rc,x); } } int main() { int n,i,j,len; node *BT,*BX; char s[10],temp[10],pre[10],in[10]; scanf("%d",&n); while(n) { BT=NULL; scanf("%s",s); len=strlen(s); createBT(&BT,len,s); pos=0; preOrder(BT,pre); pos=0; inOrder(BT,in); for(i=0;i<n;i++) { BX=NULL; scanf("%s",s); len=strlen(s); createBT(&BX,len,s); pos=0; preOrder(BX,temp); for(j=0;j<len;j++) if(pre[j]!=temp[j]) break; if(j<len) printf("NO\n"); else { pos=0; inOrder(BX,temp); for(j=0;j<len;j++) if(in[j]!=temp[j]) break; if(j<len) printf("NO\n"); else printf("YES\n"); } } scanf("%d",&n); } return 0; }
相关文章推荐
- 判断两个序列构成二叉搜索树是否相同
- 1.4 写一个函数判断两个字符串是否使用相同的字符构成。
- 1009 比较两个二叉排序树是否相同
- 算法:字符串处理-判断两个字符串是否互为“形变词”(判断两字符串中字符种类和出现次数是否均相同)
- sql查询出表中所有列名 判断两个表中的列是否相同
- [字符串算法题]2.判断两个字符串是否由相同的字符组成
- java中如何高效判断两个容器是否有相同元素(时间复杂度为O(1))
- Java判断两个二叉树是否相同
- 使用Enumerable.SequenceEqual<TSource> 方法 (IEnumerable<TSource>, IEnumerable<TSource>)判断两个集合是否相同
- java 判断两个String 是否是相同字母异序词
- 用指针判断是否两个数组是否有相同的数字,有的话输出相同数字
- jquery 判断两个对象是否相同
- shell怎么判断两个文件内容是否相同
- Math:判断两个函数是否相同
- 判断两个集合中是否存在相同的数据并去重
- 判断一个字符串是否是有其他两个字符串交错构成的(Interleaving String)
- 华为机试题:判断一个数字中是否包含两个相同的子串
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
- [字符串算法题]2.判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成