
 
- 对于采用顺序存储方式保存的二叉树,根结点保存在SqBiTNode[0]中;当某结点保存SqBiTNode[i]中时,若有左孩子,则其值保存在SqBiTNode [2i+1]中;若有右孩子,则其值保存在SqBiTNode[2i+2]中;若有双亲结点,则其值保存在SqBiTNode [(i-1)/2]中
 - 二叉搜索树需要满足的条件是:任一结点值大于其左子树中的全部结点值,小于其右子树中的全部结点值。中序遍历二叉搜索树得到一个升序序列
 
 
算法思想
 
- 对二叉树进行中序遍历,在遍历过程中,判断当前访问结点是否大于等于上一个访问的结点,若遍历的每个结点均满足条件,则遍历结束后返回true,否则返回false
 
 
算法实现
 
int preIndex = 0;
bool isBST(SqBiTree *T,int index){if(T->SqBiNode[index] == -1) return true; if(!isBST(T,index*2+1)) return false;if(T->SqBiNode[index] <= T->SqBiNode[preIndex])  return false;else preIndex = index; if(!isBST(T,index*2+2)) return false;return true; 
}
 
补充:链式存储的二叉树判断是否为二叉排序树
 
- 二叉排序的中序遍历时递增有序的序列
 - 设置全局变量temp记录已访问过结点的最大值
 - 设置全局变量flag记录是否满足后访问的结点始终大于先前访问的结点
 - 若遍历结束后,flag的值未发生变化,为true,则是二叉排序树
 
 
int temp=MIN_INT;
bool isBST=true;
void InOrder(BiTree T){if(T =NULL)return;InOrder(T->Ichild);if (T->data >temp){temp=T->data;elseisBST=false;InOrder(T->rchild);
}
TreeNode* pre = NULL; 
bool isValidBST(TreeNode* root) {if (root == NULL) return true;bool left = isValidBST(root->left);if (pre != NULL && pre->val >= root->val) return false;pre = root; bool right = isValidBST(root->right);return left && right;
}