Description
试编写程序,判别给定的二叉树是否为二叉排序树。设此二叉树以二叉链表作存储结构,且树中结点的关键字均不同。
Input
按先序输入二叉树各结点(结点值大于0),其中-1表示取消建立子树结点。
Output
若该二叉树为二叉排序树,则输出yes;否则,输出no。
-
Sample Input
12 8 4 -1 -1 10 -1 -1 16 13 -1 -1 18 -1 -1
-
Sample Output
yes
#include<stdio.h> #include<stdlib.h> typedef struct BinaryTree{ int num; struct BinaryTree *lchild; struct BinaryTree *rchild; }BinaryTree; void CreatBTree(BinaryTree *List){ int n; scanf("%d", &n); if(n == -1) List = NULL; else{ List = (BinaryTree*)malloc(sizeof(BinaryTree)); List->num = n; CreatBTree(List->lchild); CreatBTree(List->rchild); } } int judge(BinaryTree *List){ if(!List){ return 1; } else if((List->lchild) && (List->rchild)){ if((List->num > List->lchild->num) || (List->num < List->rchild->num)){ return 0; } else{ return(judge(List->lchild)&&judge(List->rchild)); } } else if(List->lchild && !List->rchild){ if(List->num > List->lchild->num){ return 0; } else{ return(judge(List->lchild)); } } else if(!List->lchild && List->rchild){ if(List->num < List->rchild->num){ return 0; } else{ return(judge(List->rchild)); } } return 1; } int main(){ BinaryTree *List = NULL; CreatBTree(List); if(judge(List)){ printf("yes\n"); } else{ printf("no\n"); } return 0; }