递归求二叉树的高度
用递归求树的高度,哎。。。平时很少用指针,写起来挺吃力的
#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; else return 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; }

posted on 2012-06-27 08:29 java课程设计例子 阅读(515) 评论(0) 收藏 举报