>形状比较的递归算法 ig Status Compare(SqbT bt, SqBT btl, int i) 结 Status k: if(bt i && btliD fif((k=Compare(bt, btl, 2*i)) 树 k=Compare(bt, btl, 2*i+1); f else if(bt[il==0 & btlil==0)k=TRUE; 叉 else k= FALSE; return k >求元素e在二叉树中层次 * int FindNode( SqBT bt, int i, TElem Type e) 据 结 static k; int kI; 构 k++ if(i<Max Size & bti)i if(e==bt[Dkl=k else if( (k1=FindNode(bt, 2*i, eD)) kI=FindNode(bt, 2*i+l, e); 3 else kl=0 k--; return kl;
11 数 据 结 构 之 树 和 二 叉 树 21 ¾ 形状比较的递归算法 Status Compare(SqBT bt,SqBT bt1,int i){ Status k; if(bt[i] && bt1[i]) {if((k=Compare(bt, bt1, 2*i))) k=Compare(bt, bt1, 2*i+1);} else if(bt[i]==0 && bt1[i]==0) k=TRUE; else k=FALSE; return k; } 数 据 结 构 之 树 和 二 叉 树 22 ¾ 求元素e在二叉树中层次 int FindNode(SqBT bt,int i,TElemType e){ static k; int k1; k++; if(i<Max_Size && bt[i] ){ if(e==bt[i]) k1=k; else if(!(k1=FindNode(bt,2*i,e))) k1=FindNode(bt,2*i+1,e); } else k1=0; k--; return k1; }
>求二叉树T的深度 l int DepthBT(SqBT bt, int i)( 结 int k1k2 if(i>=Max Size btiD return 0; kI=Depth BT(bt, 2*1); 树和二叉树 k2=Depth BT(bt, 2 *i+1); return(1+(k1>=k2)?k1:k2); >前序打印树中所有结点的层次 E void PrintNode(SqBT bt, int i) 构 static k k++ if(i<Max Size&&bt ii printf("(%od, %03d)",k, bt[i); 树和二叉树 PrintNode(bt, 2*1); PrintNode(bt, 2*i+1):) 24
12 数 据 结 构 之 树 和 二 叉 树 23 ¾ 求二叉树T的深度 int DepthBT(SqBT bt,int i){ int k1,k2; if(i>=Max_Size||!bt[i]) return 0; k1=DepthBT(bt,2*i); k2=DepthBT(bt,2*i+1); return(1+((k1>=k2) ? k1 : k2)); } 数 据 结 构 之 树 和 二 叉 树 24 ¾ 前序打印树中所有结点的层次 void PrintNode(SqBT bt,int i){ static k; k++; if(i<Max_Size&&bt[i]){ printf("(%d,%3d) ",k,bt[i]); PrintNode(bt,2*i); PrintNode(bt,2*i+1);} k- -; }
打印一维数组 4 void printS(SqBT bt)& int printf( InSeqArray: ) for(i=l; i<=Max Size; i++) 树和二叉树 printf( %3d",btiD MenuListo{/显示菜单* printf("nt… I* printf("\nit\t1. Insert or change One Elem"); p rinf("nIt\t2 Pre, In and Post Order Traverse ) x printf("nlt\t3. Compare two btree"); printf("Initit4. In Order Traverse Print Tree ); at printf("\nitIt5. Print Sqlist); 2 printf("\nlt\t6. Count the Depth of a Tree"); A printf@"nltlt7. Pre Order Print the Step of a Node");
13 数 据 结 构 之 树 和 二 叉 树 25 ¾ 打印一维数组 void printSq(SqBT bt){ int i; printf("\nSeqArray:"); for(i=1;i<=Max_Size;i++) printf("%3d ",bt[i]); } 数 据 结 构 之 树 和 二 叉 树 26 MenuList(){ /*显示菜单 */ printf("\n\t........................................"); printf("\n\t\t1. Insert or change One ElemData"); printf("\n\t\t2. Pre, In and Post Order Traverse"); printf("\n\t\t3. Compare two btree"); printf("\n\t\t4. In Order Traverse Print Tree"); printf("\n\t\t5. Print SqList"); printf("\n\t\t6. Count the Depth of a Tree"); printf("\n\t\t7. Pre Order Print the Step of a Node");