摘要: 1.递归算法: void PreOrder(BNode p) { if(p == NULL) return; visit(p); PreOrder(p->lchild); PreOrder(p->rchild); }2.非递归算法: 数据结构: typedef PBinTreeNode DataType; //栈元素的类型是PBinTreeNode struct SeqStack { DataType s[MAXNUM]; int t; }; typedefstruct SeqStack * PS... 阅读全文
posted @ 2012-09-10 20:24 毛毛hhmm 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 思路:采用递归的思想,递归调用本算法来计算根结点的每棵子树的结点个数,并将它们相加,之后再加1(根结点),就得到该树的结点个数。时间复杂度:每个结点访问一次,时间代价为O(n)。空间复杂度:递归栈的深度为O(h),h为树的高度。程序代码: int numbew_of_node(CSTree t) { PCSNode p1; int num; if(t == NULL) return 0; for(p1 = t->lchild,num = 1;p1 != NULL; p1 = p1->rsibling) num += numbew_of_node(... 阅读全文
posted @ 2012-09-10 20:13 毛毛hhmm 阅读(831) 评论(0) 推荐(0) 编辑
摘要: 思路:采用递归的思想,先判断两棵树t1和t2的根结点的元素是否相同,再判断两棵树根结点的子树个数是否相等,最后通过多次递归调用本算法来判断:是否存在两棵树根结点的子树集之间的一个匹配(或一一对应),使得每一对子树相等。算法中用到了一个临时数组temp[]来存放两棵树根结点的子树的匹配信息,temp[i]=j表示t1的第i棵子树与t2的第j棵子树相匹配。程序代码: int equal(CSTree t1,CSTree t2) { PCSNode p1,p2; int n1,n2,i; int *temp; if(t1 == NULL && t2 == NULL) ... 阅读全文
posted @ 2012-09-10 20:03 毛毛hhmm 阅读(1112) 评论(0) 推荐(0) 编辑
摘要: 思路:采用递归的思想, 先判断两棵树的根节点的元素是否相同,再递归调用本算法依次判断两棵树根结点的每对子树是否相同。时间复杂度:每个结点访问一次,故时间代价为O(n)。空间复杂度:递归栈空间的大小与树的高度成正比。程序代码: int same(CSTree t1,CSTree t2) { PCSNode p1,p2; if(t1 == NULL && t2 == NULL) return 1; if( (t1 != NULL && t2 ==NNULL) || (t1 == NULL && t2 != NULL) ) return 0; if(( 阅读全文
posted @ 2012-09-10 19:29 毛毛hhmm 阅读(720) 评论(0) 推荐(0) 编辑
摘要: 数据结构: struct BinTreeNode; typedef struct BinTreeNode * PBinTreeNode; struct BinTreeNode { int info; PBinTreeNode llink; PBinTreeNode rlink; }; typedef struct BinTreeNode * BinTree;程序代码: PBinTreeNode parent_btree(PBinTreeNode p,BinTree t) { PBinTreeNode r; if(p == NULL) re... 阅读全文
posted @ 2012-09-10 19:05 毛毛hhmm 阅读(2744) 评论(0) 推荐(0) 编辑
摘要: 数据结构: struct CSNode; typedef struct CSNode * PCSNode; struct CSNode { DataType info; PCSNode lchild; PCSNode rsibling; }; typedef struct CSNode *CSTree; //树定义为根结点的指针程序代码: PCSNode parent_cstree(PCSNode p,CSTree t) { PCSNode q,r; if(p == NULL) return NULL; if(p == t |... 阅读全文
posted @ 2012-09-10 18:56 毛毛hhmm 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 1.具有n个结点的完全二叉树的高度为log2n(向下取整)。2.对一棵有n个结点的完全二叉树按层次次序从1开始编号,则对任一结点i>1,其双亲结点是i/2(向下取整)。3.采用链式方法存储N个结点的二叉树,该二叉树中共有2N个指针域,其中非空指针N-1个。4.有28个结点的二叉树的最大高度为27(即所有非叶结点都只有一个子结点),最小高度为4(log228 )。5.3个结点A,B,C可以构成30种不同的二叉树(满二叉树,左斜树,右斜树,左旋树,右旋树,每种三个结点有6种排列)。6.按中根次序遍历二叉树的结果为abc,则有5种不同形态的二叉树可以得到这一遍历结果(分别以a,b,c为根画出对 阅读全文
posted @ 2012-09-10 18:48 毛毛hhmm 阅读(629) 评论(0) 推荐(0) 编辑
摘要: 1.递归算法: 程序代码: void move(char x,char y) { static int count = 0; printf("%c -> %c",x,y); count++; if(count == 4) { printf("\n"); count = 0; } else printf("\t"); } void hanio(int n,char x,char y,char z) //把n个圆盘从塔座X移动到塔座Z的过程,Y为辅助塔座 ... 阅读全文
posted @ 2012-09-09 23:05 毛毛hhmm 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1.递归算法: 程序代码: int fib(int n) { if(n < 0) return -1; if(n == 0 || n==-1) return n; return fib(n-2)+fib(n-1); } 时间复杂度:fib(n)所耗的时间为T(n),则T(0) = T(1) = O(1),当n>=2时,T(n) = T(n-2)+T(n-1)。由于T(n-1) = T(n-3)+T(n-2)>=T(n-2),因此,T(n) = T(n-2)+T(n-1) <= 2T(n-1),所以,T(n) <= 21T(n-1) <= 22T(... 阅读全文
posted @ 2012-09-09 23:03 毛毛hhmm 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 数据结构: struct Queue { DataType sequ[m]; int rear,quelen; }; typedef struct Queue * PQueue;思路:入队列和出队列的算法和普通队列的思路近似,只是原来用两指针指向只差来表示队列中元素的个数,现在直接用quelen来表达。程序代码: PQueue createEmptyQueue() //创建空队列 { PQueue pqu = (PQueue)malloc(sizeof(struct Queue)); pqu->rear = 0; pqu->quelen ... 阅读全文
posted @ 2012-09-09 22:43 毛毛hhmm 阅读(877) 评论(0) 推荐(0) 编辑