编程题

完善程序:(二叉查找树)二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的 值、小于其右子树上所有节点的值。 试判断一棵树是否为二叉查找树。

输入的第一行包含一个整数n,表示这棵树有n个顶点, 编号分别为1,2, … ,n,其 中编号为1的为根结点。之后的第i行有三个数value,left_child,right_child,分别表示 该节点关键字的值、左子节点的编号、右子节点的编号;如果不存在左子节点或右子节 点,则用0代替。输出1表示这棵树是二叉查找树,输出0则表示不是。


#include <iostream>

using namespace std;


const int SIZE = 100;

const int INFINITE = 1000000;


struct node {

int left_child, right_child, value;

};


node a[SIZE];


int is_bst(int root, int lower_bound, int upper_bound)

{

int cur;


if (root == 0)

return 1;

cur = a[root].value;

if ((cur > lower_bound) && (     (1)     ) &&             //(3 分)


(is_bst(a[root].left_child, lower_bound, cur) == 1) && 

(is_bst(    (2)     ,    (3)     ,     (4)     ) == 1))    //(3 分,3 分,3 分)

return 1;

return 0;

}


int main()

{

int i, n;

cin>>n;

for (i = 1; i <= n; i++)

cin>>a[i].value>>a[i].left_child>>a[i].right_child;

cout<<is_bst(    (5)    , -INFINITE, INFINITE)<<endl;    //(2 分) 

return 0;

}

查看答案
赣ICP备20007335号-2