92.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. bool isSortTree(Tree *T) {
    29. static int min = -32768;//最开始设定min为最小值,确保第一个节点能够进行下去
    30. static bool flag = true;//作为是否是升序的标记,采用静态变量,不然每次都会初始化
    31. if (T) {
    32. isSortTree(T->left);
    33. if (T->data < min)
    34. flag = false;
    35. else
    36. min = T->data;//min 1
    37. isSortTree(T->right);
    38. }
    39. return flag;
    40. }
    41. int main() {
    42. //先创建一颗二叉树
    43. Tree *T = (Tree *)malloc(sizeof(Tree *));
    44. T = create(T);
    45. isSortTree(T) ? printf("是二叉排序树") : printf("不是二叉排序树");
    46. return 0;
    47. }