|
t; // 遍历右分支 } } } } void Last_Order(struct node *t)//后序遍历递归形式 { if(t==NULL) return ; Last_Order(t->right); Last_Order(t->left); printf("%c -> ",t->data); } void Print_Leaf(struct node *t) { if(t!=NULL) { if(t->left==NULL && t->right==NULL) { printf("%c ",t->data); } Print_Leaf(t->left);//访问左分支的叶子节点 Print_Leaf(t->right);//访问右分支的叶子节点 } } void Ceng_Order(struct node *t)//层次遍历,采用环形队列来实现 { struct node *que[N],*p; int f,r; //队列的头指针 和 尾指针 f = -1; r = -1; que[++r] = t; //根节点入队 while(f!=r) { f = (f + 1)% N; //防止队溢出 p = que[f]; //队列头结点 出队 printf("%c -> ",p->data); if(p->left !=NULL) // 将其左孩子 压入队列 { r = (r + 1 )% N; que[r] = p->left; } if(p->right !=NULL) // 将其右孩子 压入队列 { r = (r + 1 )% N; que[r] = p -> right; } } } int shendu(struct node *t) { int x=0,y = 0; if(t!=NULL) { x = shendu(t->left); y = shendu(t->right); if(x>y) return(x+1); else return (y+1); } else return 0; } /*bool Like(struct node *t1,struct node *t2)//判断俩颗树是否相似 { bool like1,like2; if(t1==NULL && t2 ==NULL) return true; //所有对应的分支都相同 else if(t1==NULL || t2 ==NULL) return false; else { like1 = Like(t1->left,t2->left); like2 = Like(t1->right,t2->left); return (like1 && like2); //返回的是 like1 与 like2的 与 } }*/ int main() { struct node *t; t = make();//建树 puts("先序遍历,递归形式"); First_Order(t); cout<<"END"<
|