Appearance
题目
已知非空二叉树 T 的结点值均为正整数,采用顺序存储方式保存,数据结构定义如下:
c
typedef struct { // MAX_SIZE 为已定义常量
Elemtype SqBiTNode[MAX_SIZE]; // 保存二叉树结点值的数组
int ElemNum; // 实际占用的数组元素个数
} SqBiTree;T 中不存在的结点在数组 SqBiTNode 中用 -1 表示。例如,对于两棵非空二叉树 T₁ 和 T₂:
二叉树 T₁(满足 BST 定义):
二叉树 T₂(不满足 BST 定义):
T₁ 和 T₂ 对应的顺序存储如下(位置从下标 0 起,1-indexed 的层序位置规则:父 i 的左孩子在 2i+1、右孩子在 2i+2):
| 数组 | 内容(依次) | ElemNum |
|---|---|---|
T₁.SqBiTNode | [40, 25, 60, -1, 30, -1, 80, -1, -1, 27] | 10 |
T₂.SqBiTNode | [40, 50, 60, -1, 30, -1, -1, -1, -1, -1, 35] | 11 |
请设计一个尽可能高效的算法,判定一棵采用这种方式存储的二叉树是否为二叉搜索树,若是则返回 true,否则返回 false。要求:
(1) 给出算法的基本设计思想。
(2) 根据设计思想,采用 C 或 C++ 语言描述算法,关键之处给出注释。