기능을 달성하기 위해 필요한이 문제는 여부를 주어진 이진 트리 이진 검색 트리를 확인합니다.
기능 인터페이스 정의 :
bool IsBST ( BinTree T );
다음, 상기 BinTree 구조가 정의된다 :
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
IsBST이 함수는 주어진 이진 탐색 트리 T, 즉 다음 이진 정의를 만족하는지 여부를 판단하여야한다 :
정의 : 이진 검색 트리 이진 트리, 그것은 비어있을 수 있습니다. 비어 있지 않은 경우에는 다음과 같은 속성을 만족시킬 것입니다 :
모든 키 비어 왼쪽 하위 트리의 루트 키보다 작습니다.
모든 키 비어 우측 하위 트리의 루트 키보다 더 크다.
왼쪽과 오른쪽 서브 트리는 이진 검색 나무입니다.
T는 이진 검색 트리 인 경우, 함수는 true, 그렇지 않은 경우는 false를 반환합니다.
심판 테스트 프로그램의 예 :
#include <stdio.h>
#include <stdlib.h>
typedef enum { false, true } bool;
typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree BuildTree(); /* 由裁判实现,细节不表 */
bool IsBST ( BinTree T );
int main()
{
BinTree T;
T = BuildTree();
if ( IsBST(T) ) printf("Yes\n");
else printf("No\n");
return 0;
}
/* 你的代码将被嵌在这里 */
입력 샘플 1 : 아래의
출력 샘플 1 :
Yes
입력 샘플 2 : 아래의
출력 샘플 2 :
No
코드 :
//方法:根据二叉树搜索树的性质,当左子树中的最大值小于根结点且右子树的最小值大于根结点时,
//可确定一棵二叉搜索树
bool IsBST ( BinTree T )
{
BinTree L,R;
if(!T)return true;
if(!T->Right && !T->Left)return true;
L=T->Left; //注意:这里的赋值必须是在确定该树存在右子数和右子数之才能定义
R=T->Right;
if(L)//如果存在左子树
{
while(L->Right)L=L->Right;
if(L->Data>T->Data)return false;
}
if(R)
{
while(R->Left)R=R->Left;
if(R->Data<T->Data)return false;
}
return true;
}