int hight(struct node* root) { if(root==NULL) return 0; else { int l=hight(root->left); int r=hight(root->right); return l>r?(l+1):(r+1); } }
int hight(TREE T) { h++; if(maxh<h) maxh=h; if(T){ hight(T->left); hight(T->right); } h--; return maxh-1; }
int binatTreeMain(){ TREE T; int choice; char c='y'; printf("请输入带空二叉树先序遍历序列(0表示空节点),例如3个元素的二叉树输入为\n"); printf(" 1 2 0 0 3 0 0 (1为根结点):"); creattree(&T); while(c=='Y'||c=='y'){ choice=menu(); switch(choice){ case 11:printf("递归法前序遍历:");pretraverse1(T);break; case 12:printf("非递归法前序遍历:");pretraverse2(T);break; case 21:printf("递归法中序遍历:");intraverse1(T);break; case 22:printf("非递归法中序遍历:");intraverse2(T);break; case 3:printf("递归法后序遍历:");posttraverse1(T);break; case 41:outdegree1(T); printf("出度为0的节点数目:%d\n",n0); printf("出度为1的节点数目:%d\n",n1); printf("出度为2的节点数目:%d\n",n2);break; case 42:outdegree2(T);break; case 5:floortraverse(T);break; case 6:printf("\n此二叉树高度为:%d",hight(T));break; case 7:exchange(&T);intraverse1(T);break; } printf("\n是否继续?(Y/N):"); fflush(stdin); scanf("%c",&c); system("cls"); } }
int maxwidth(struct node *root) { if(root) { int h=hight(root); int *con=(int *)calloc(sizeof(int),h); int level=0; getwidth(root,con,level); return ma(con,h); } }