1. 二叉树的深度及结点最远距离
【问题描述】考研真题:求二叉树的深度及二叉树中最远两个结点的距离。
【输入形式】拓展的前序遍历序列
【输出形式】深度和距离
【样例输入】AB#C##
#include <iostream>
#include <cstring>
using namespace std;
struct node
{
char data;
node *lc, *rc;
};
node *cre(char a[], int len, int &i)
{
if (i < len && a[i] != '#')
{
node *r = new node;
r->data = a[i];
r->lc = cre(a, len, ++i);
r->rc = cre(a, len, ++i);
return r;
}
else
return NULL;
}
void getdeep(node *a, int step, int &deep)
{
if (a)
{
deep = max(deep, step);
getdeep(a->lc, step + 1, deep);
getdeep(a->rc, step + 1, deep);
}
}
void getdis(node *t, int &dis)
{
int deep = 0, step = 1;
if (t == NULL)
return;
getdeep(t->lc, step, deep);
int lh = deep;
deep = 0;
getdeep(t->rc, step, deep);
int rh = deep;
if (rh + lh > dis)
dis = rh + lh;
if (t->lc)
getdis(t->lc, dis);
if (t->rc)
getdis(t->rc, dis);
}
int main()
{
char a[100];
cin >> a;
int i = 0;
node *t = cre(a, strlen(a), i);
int deep = 0, step = 1, dis = 1;
getdeep(t, step, deep);
getdis(t, dis);
cout << deep << " " << dis;
}
[点击并拖拽以移动]