摘要:
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... 阅读全文
摘要:
思路:采用递归的思想,递归调用本算法来计算根结点的每棵子树的结点个数,并将它们相加,之后再加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(... 阅读全文
摘要:
思路:采用递归的思想,先判断两棵树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) ... 阅读全文
摘要:
思路:采用递归的思想, 先判断两棵树的根节点的元素是否相同,再递归调用本算法依次判断两棵树根结点的每对子树是否相同。时间复杂度:每个结点访问一次,故时间代价为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(( 阅读全文
摘要:
数据结构: 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... 阅读全文
摘要:
数据结构: 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 |... 阅读全文
摘要:
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为根画出对 阅读全文