题记:要找工作了,要面试,没学过数据结构怎么破,学呗!!!
以下例子是二叉树的创建、遍历、求高度的一个例子,可以运行
注意:输入数据的正确性,一定是要按照,先序进行输入,如果输入不正确则不会有值输出。
可以输入:ABC##DE#G##F##
可以输入:AB##C##
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct bnode{
char data;
struct bonde *lchild,*rchild;
}btnode;
btnode *create(){ //递归实现二叉树的创建,先序创建树
char c;
btnode *t;
c=getchar();
if(c=='#'){ //##说明是叶子节点
t=(btnode*)malloc(sizeof(btnode));//不能bnode
t->data='#';
t->lchild=NULL;
t->rchild=NULL;
}
else{//非叶子节点
t=(btnode*)malloc(sizeof(btnode));
t->data = c;
t->lchild = create();
t->rchild = create();
}
return t;
}
void print(btnode *t){ //先序遍历 打印的是非叶节点
if(t){
printf("%c",t->data);
print(t->lchild);
print(t->rchild);
}
/* 中序遍历
if(t){
print(t->lchild);
printf("%c",t->data);
print(t->rchild);
}
*/
/* 后续遍历
if(t){
print(t->lchild);
print(t->rchild);
printf("%c",t->data);
}
*/
}
int high(btnode *t){
int HR,LR,MAXR;
if(t==NULL){
return 0;
}
else{
LR = high(t->lchild);
HR = high(t->rchild);
MAXR = (LR>HR)?LR:HR;
return MAXR+1;
}
}
int main(){
int ans;
btnode *t;
t = create();
print(t);
printf("\n");
ans = high(t);
printf("high=%d",ans);
return 0;
}