이진 검색 트리 PTA 여부

기능을 달성하기 위해 필요한이 문제는 여부를 주어진 이진 트리 이진 검색 트리를 확인합니다.

기능 인터페이스 정의 :

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;
}

여기에 그림 삽입 설명

추천

출처blog.csdn.net/qq_44256227/article/details/89981211