#include<iostream>
#include<stdlib.h>
// 定义二叉树节点结构体
typedef struct TB {
struct TB* lchild; // 左子树指针
struct TB* rchild; // 右子树指针
int data; // 节点数据
} BTnode, *BTree;
// 计算二叉树深度的递归函数
int depth(BTree T) {
BTree p, q;
int r, l;
// 如果树为空,深度为 0
if (T == NULL) {
return 0;
}
// 递归计算左子树深度
l = depth(T->lchild);
// 递归计算右子树深度
r = depth(T->rchild);
// 比较左右子树深度,取较大值加 1 作为当前树的深度
if (l > r) {
return l + 1;
} else {
return r + 1;
}
}
int main() {
// 动态分配根节点内存
BTree T = (BTree)malloc(sizeof(BTnode));
t1, t2, t3, t4, t5;
// 为根节点赋值
T->data = 0;
// 为根节点的左子树分配内存
T->lchild = (BTree)malloc(sizeof(BTnode));
// 为根节点的右子树分配内存
T->rchild = (BTree)malloc(sizeof(BTnode));
// 左子树节点指针
t1 = T->lchild;
// 右子树节点指针
t2 = T->rchild;
// 为左子树节点赋值
t1->data = 1;
// 左子树没有子节点
t1->lchild = NULL;
t1->rchild = NULL;
// 为右子树节点赋值
t2->data = 2;
// 为右子树的左子树分配内存
t2->lchild = (BTree)malloc(sizeof(BTnode));
// 为右子树的右子树分配内存
t2->rchild = (BTree)malloc(sizeof(BTnode));
// 右子树的左子树节点指针
t3 = t2->lchild;
// 右子树的右子树节点指针
t4 = t2->rchild;
// 为右子树的左子树节点赋值
t3->data = 3;
// 右子树的左子树没有子节点
t3->lchild = NULL;
t3->rchild = NULL;
// 为右子树的右子树节点赋值
t4->data = 4;
// 右子树的右子树没有子节点
t4->lchild = NULL;
t4->rchild = NULL;
// 调用 depth 函数计算二叉树深度并输出
printf("%d", depth(T));
return 0;
}
已知main()里面的二叉树是:
运行结果: