
/* 编写一个算法判断给定的二叉树是否是二叉排序树 分析: 二叉排序树的中序序列是升序序列,我们可以根据这一特性来进行判定*/typedef struct node { int data; node *left, *right;}Tree;#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>Tree *create(Tree *T) {//先序创建一颗二叉树 int data; printf("请输入当前节点值:data="); scanf("%d", &data); getchar(); if (data != -1) { T = (Tree *)malloc(sizeof(Tree)); T->data = data; T->left = NULL; T->right = NULL; T->left = create(T->left); T->right = create(T->right); } return T;}bool isSortTree(Tree *T) { static int min = -32768;//最开始设定min为最小值,确保第一个节点能够进行下去 static bool flag = true;//作为是否是升序的标记,采用静态变量,不然每次都会初始化 if (T) { isSortTree(T->left); if (T->data < min) flag = false; else min = T->data;//min 1 isSortTree(T->right); } return flag;}int main() { //先创建一颗二叉树 Tree *T = (Tree *)malloc(sizeof(Tree *)); T = create(T); isSortTree(T) ? printf("是二叉排序树") : printf("不是二叉排序树"); return 0;}