93.png

    1. /*
    2. 设计一个算法,求出指定节点在给定二叉排序树中的层次
    3. 分析:
    4. 我们可以根据二叉排序树的性质,从根节点一直向下查找,每查找一次,层次便加一
    5. */
    6. typedef struct node {
    7. int data;
    8. node *left, *right;
    9. }Tree;
    10. #define _CRT_SECURE_NO_WARNINGS
    11. #include <stdio.h>
    12. #include <stdlib.h>
    13. Tree *create(Tree *T) {//先序创建一颗二叉树
    14. int data;
    15. printf("请输入当前节点值:data=");
    16. scanf("%d", &data);
    17. getchar();
    18. if (data != -1) {
    19. T = (Tree *)malloc(sizeof(Tree));
    20. T->data = data;
    21. T->left = NULL;
    22. T->right = NULL;
    23. T->left = create(T->left);
    24. T->right = create(T->right);
    25. }
    26. return T;
    27. }
    28. void findLevel(Tree *T, int p,int &depth) {
    29. if (T) {
    30. if (T->data < p) {
    31. depth++;
    32. findLevel(T->right, p,depth);
    33. }
    34. else if(T->data > p){
    35. depth++;
    36. findLevel(T->left, p,depth);
    37. }
    38. }
    39. }
    40. int main() {
    41. //创建一颗二叉排序树
    42. Tree *T = (Tree *)malloc(sizeof(Tree *));
    43. T = create(T);
    44. int p = 7,depth=1;//手动指定节点值
    45. findLevel(T,p,depth);
    46. printf("该节点所在的层次为第%d层",depth);
    47. return 0;
    48. }