求二叉树的高度

来源:互联网 发布:小强软件测试 编辑:程序博客网 时间:2024/04/19 20:14

现在有一棵合法的二叉树,树的节点都用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入:
输入的第一行表示节点的个数n(1<=n<=1000),节点的编号为0到n-1组成,下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的的编号

输出
输出树的高度,为一个整数

样例输入:
5
0 1
0 2
1 3
1 4

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int getLength(int **data, int i, int j){    int length = 0;    if (data[i][j] != -1)    {        //i->j可达         int max =0;        for (int n = 0; n < 1000; n++)        {            int temp = getLength(data, j, n)+1;            if (temp>max)            {                max = temp;            }        }        if (max==0)        {            return 1;        }        return max;    }    else    {        return 1;    }}int main(){    int n;    scanf("%d", &n);    int **data = new int*[1000];    for (int i = 0; i < 1000; i++)    {        data[i] = new int[1000];    }    for (int i = 0; i < 1000; i++)    {        for (int j = 0; j < 1000; j++)        {            data[i][j] = -1;        }    }    for (int i = 0; i < n - 1; i++)    {        int a, b;        scanf("%d %d", &a, &b);        data[a][b] = 1;    }    int lengthMax = -1;    for (int i = 0; i < 1000; i++)    {        for (int j = 0; j < 1000; j++)        {            if (data[i][j] != -1)            {                int len = getLength(data, i, j);                if (len>lengthMax)                {                    lengthMax = len;                }            }        }    }    cout << lengthMax << endl;    return 0;}

结论:刚开始做这个题的时候,知道用递归或者循环的办法解决,选择数据结构首选是邻接矩阵,但是在写递归的时候,出现了错误,导致一直只有60%的测试用例通过,笔试结束后仔细写了一下算法的递归表达式,以及递归退出条件,这个代码应该是可以通过的,欢迎网友来吐槽修正。

1 0
原创粉丝点击