【核心代码】
int L = 0, max = 0;
void Depth(BTNode* bt)
{
if (bt != NULL)
{
L++;
if (L > max)
{
max = L;
}
Depth(bt->lchild);
Depth(bt->rchild);
L--;
}
}
【测试代码】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxSize 100
typedef struct BTNode
{
char data;
struct BTNode* lchild, *rchild;
}BTNode;
//后序和中序确定一棵二叉树
BTNode* CreateBT(char post[], char in[], int l1, int r1, int l2, int r2)
{
if (l1 > r1)
return NULL;
BTNode* bt = (BTNode*)malloc(sizeof(BTNode));
bt->data = post[r1];
//在中序序列中查找根结点的位置
int i;
for (i = l2; i <= r2; ++i)
if (in[i] == post[r1])
break;
//确定左右子树
bt->lchild = CreateBT(post, in, l1, l1 + i - l2 - 1, l2, i - 1);
bt->rchild = CreateBT(post, in, l1 + i - l2, r1 - 1, i + 1, r2);
return bt;
}
char data = '\0';
int L = 0, max = 0;
void Depth(BTNode* bt)
{
if (bt != NULL)
{
L++;
if (L > max)
{
max = L;
data = bt->data;
}
Depth(bt->lchild);
Depth(bt->rchild);
L--;
}
}
int main()
{
char post[maxSize] = "DFEBCA";
char in[maxSize] = "DBEFAC";
//构建二叉树
int l1 = 0, r1 = strlen(post) - 1;
int l2 = 0, r2 = strlen(in) - 1;
BTNode* root = CreateBT(post, in, l1,r1, l2, r2);
Depth(root);
printf("Depth:%c %d ", data, max);
system("pause");
return 0;
}