用遞迴求樹的高度,哎。。。平時很少用指標,寫起來挺吃力的
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct bnode{char data;struct bnode *lchild,*rchild;}btnode;int max(int x,int y){return x>y?x:y;}btnode *create() //建樹{char c;btnode *t;c=getchar();if(c=='#')t=NULL;else{t=(btnode *)malloc(sizeof(btnode));t->data=c;t->lchild=create();t->rchild=create();}return t;}void print(btnode *t){if(t!=NULL){printf("%c ",t->data);print(t->lchild);print(t->rchild);}}int high(btnode *T){if(T==NULL)return 0;elsereturn max(high(T->lchild),high(T->rchild))+1;}int main(){int ans;btnode *t;t=create();print(t);printf("\n");ans=high(t);printf("樹的高度為%d\n",ans);return 0;}
也可以引用h為樹的高度
#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct bnode{char data;struct bnode *lchild,*rchild;}btnode;int max(int x,int y){return x>y?x:y;}btnode *create(){char c;btnode *t;c=getchar();if(c=='#')t=NULL;else{t=(bnode *)malloc(sizeof(btnode));t->data=c; t->lchild=create();t->rchild=create();}return t;}void print(btnode *T){if(T!=NULL){printf("%c ",T->data);print(T->lchild);print(T->rchild);}}void high(bnode *T,int &h) 引用h為樹的高度{if(T==NULL)h=0;else{ int h1,h2; high(T->lchild,h1); high(T->rchild,h2); h=max(h1,h2)+1;}}int main(){int ans;btnode *t;t=create();print(t);printf("\n");high(t,ans);printf("樹的高度為%d\n",ans); return 0;}