题目来源:严蔚敏《数据结构》C语言版本习题册 6.64

    【题目】6.64
    对以双亲表表示的树编写计算树的深度的算法

    【答案】

    1. /*----------------
    2. |6.64 求树的深度|
    3. ----------------*/
    4. int TreeDepth(PTree T) {
    5. int i,j;
    6. int dep;
    7. int maxdep = 0;
    8. for (i=0; i<T.n; i++) { //遍历每个结点
    9. dep=0;
    10. for (j=i; j>=0; j=T.nodes[j].parent) dep++; //从该结点,往上找父亲-->得到深度
    11. if (dep>maxdep) maxdep=dep;
    12. }
    13. return maxdep;
    14. }

    【完整代码】

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #ifndef BASE
    4. #define BASE
    5. #define TRUE 1
    6. #define FALSE 0
    7. #define OK 1
    8. #define ERROR 0
    9. #define INFEASIBLE -1
    10. #define OVERFLOW -2
    11. typedef int Status;
    12. typedef int bool;
    13. #endif
    14. #define TElemType char
    15. void visit(TElemType e) {
    16. printf("%c ", e);
    17. }
    18. #define MAX_TREE_SIZE 100
    19. typedef struct PTNode{
    20. TElemType data;
    21. int parent; //双亲的位置域
    22. }PTNode;
    23. typedef struct{
    24. PTNode nodes[MAX_TREE_SIZE];
    25. int r,n;
    26. }PTree;
    27. /*----------------
    28. |6.64 求树的深度|
    29. ----------------*/
    30. int TreeDepth(PTree T) {
    31. int i,j;
    32. int dep;
    33. int maxdep = 0;
    34. for (i=0; i<T.n; i++) { //遍历每个结点
    35. dep=0;
    36. for (j=i; j>=0; j=T.nodes[j].parent) dep++; //从该结点,往上找父亲-->得到深度
    37. if (dep>maxdep) maxdep=dep;
    38. }
    39. return maxdep;
    40. }
    41. int main() {
    42. PTree PT;
    43. int cnt;
    44. PT.n=10;PT.r=0;
    45. PT.nodes[0].data='R';PT.nodes[0].parent=-1;
    46. PT.nodes[1].data='A';PT.nodes[1].parent=0;
    47. PT.nodes[2].data='B';PT.nodes[2].parent=0;
    48. PT.nodes[3].data='C';PT.nodes[3].parent=0;
    49. PT.nodes[4].data='D';PT.nodes[4].parent=1;
    50. PT.nodes[5].data='E';PT.nodes[5].parent=1;
    51. PT.nodes[6].data='F';PT.nodes[6].parent=3;
    52. PT.nodes[7].data='G';PT.nodes[7].parent=6;
    53. PT.nodes[8].data='H';PT.nodes[8].parent=6;
    54. PT.nodes[9].data='I';PT.nodes[9].parent=6;
    55. cnt = TreeDepth(PT);
    56. printf("树的深度:%d\n", cnt);
    57. return 0;
    58. }