题目
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
思路
- 输入创建二叉排序树
由于题目要求是按先序建立,故代码中按照根结点->左子树->右子树的顺序递归执行代码,思想和先序遍历二叉树差不多。需要注意的是-1为空的情况。
BTNode *createBTree() {
int elem;
BTNode *p;
cin >> elem;
if (elem == -1) //-1表示取消建立子树结点
return NULL;
else {
p = (BTNode *)malloc(sizeof(BTNode));
p->key = elem;
p->lc = createBTree();
p->rc = createBTree(