数据结构----二叉树叶子结点到根节点的高度计算
代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct bstTree {
int data;
struct bstTree* lchild, *rchild;
}bstTree;
void createBSTTree(bstTree* & T, int data) {
bstTree *p = NULL;
if (!T) {
p = (bstTree*)malloc(sizeof(bstTree));
p->data = data;
p->lchild = p->rchild = NULL;
T = p;
return;
}
if (data < T->data) {
createBSTTree(T->lchild, data);
}
else {
createBSTTree(T->rchild, data);
}
}
void prePrint(bstTree* BSTTree) {
if (BSTTree) {
printf("%d ", BSTTree->data);
prePrint(BSTTree->lchild);
prePrint(BSTTree->rchild);
}
}
void calLeafHeight(bstTree* T,int h) {
if (!T) {
return;
}
if (T->lchild == NULL && T->rchild == NULL) {
printf("%d叶子结点到根节点的高度为%d\n", T->data, h + 1);
}
else {
calLeafHeight(T->lchild, h + 1);
calLeafHeight(T->rchild, h + 1);
}
}
int main() {
bstTree* T = NULL;
int count, data;
printf("开始构造二叉排序树:\n输入二叉排序树结点的数目:");
scanf_s("%d", &count);
while (count--) {
printf("输入二叉排序树的第%d个结点:", count + 1);
scanf_s("%d", &data);
createBSTTree(T, data);
}
printf("前序遍历二叉排序树\n");
prePrint(T);
printf("\n");
calLeafHeight(T, 0);
printf("\n");
system("pause");
return 0;
}
测试截图:
![请添加图片描述](https://img-blog.csdnimg.cn/86e10250c1944fdea50043897e56f6d9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAZmlnaHRpbmfnmoTnoIHlhpw=,size_10,color_FFFFFF,t_70,g_se,x_16)
时间复杂度O(logn),空间复杂度O(1)
如果存在什么问题,欢迎批评指正!谢谢!