二叉树的建立(C语言)
程序员文章站
2024-01-16 23:00:16
...
二叉树长这样的;
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建一个二叉树,按照前序遍历的输入方式输入数据
BiTree CreateBiTree(){
BiTree T;
char c;
scanf("%c",&c);
if('#'==c){
T=NULL;
}
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=c;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return T;
}
//访问二叉树结点的具体操作
visit(char data,int level){
printf("%c位于第%d层\n",data,level);
}
//遍历二叉树,前序遍历法并输出每个节点所在的层数
PreOrderTraverse(BiTree T,int level){
if(T){
visit(T->data,level);
//printf("%c\n",T->data);
PreOrderTraverse(T->lchild,level+1);
PreOrderTraverse(T->rchild,level+1);
}
}
int main(){
int level;
BiTree T;
level=1;
T=CreateBiTree();
PreOrderTraverse(T,level);
return 0;
}
输入的时候先把叶子结点用#全,
变成这样下面这样的图(忽略这么丑,就大概这样的),再按照前序遍历次序输出各节点的值
求结点所在的层数,运行结果如图:
刚开始创建二叉树的方法不是上述那样写的,我觉得正确的啊,不知道为什么就是不输出,有看出哪里错的了可以告诉我,方法是这样的:
void CreateBiTree(BiTree T){//这里没用&,我看有的代码用了&,在我的编译器上,用了反而报错
BiTree T;
char c;
scanf("%c",&c);
if('#'==c){
T=NULL;
}
else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=c;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
------更求二叉树高度的方法(递归法):----------------
int Height(BiTree T)
{
int h1,h2,h;
if( T == NULL ) //空树,返回0
return 0;
if( T->lchild == NULL && T->rchild == NULL ) //只有树根结点返回1
return 1;
h1=Height(T->lchild);
h2=Height(T->rchild);
h=h1>h2?h1:h2;
return h+1;//树的高度 = MAX(左子树的高度,右子树的高度) + 1;
}