目录
一、如何判断一棵二叉树是搜索二叉树
1、搜索二叉树的定义
搜索二叉树是一种特殊的二叉树,从根节点开始,左子树根节点的值一定当前节点值小,右子树根节点的值一定比当前节点大,如下图所示
利用中序遍历判断数据是否为降序排列即可判断是否是搜索二叉树
2、递归中序遍历判断
//递归中序遍历判断是否是搜索二叉树
bool isBST(BinaryNode* headnode) {
if (headnode == nullptr) {
return true;
}
//先判断左树是否是二叉搜索树
bool isLeftBst = isBST(headnode->m_leftNode);
if (!isLeftBst) {
return false;
}
//对当前节点进行判断和处理
if (headnode->m_value <= preValue) {
return false;
}else {
preValue = headnode->m_value;
}
//前面如果都是二叉搜索树,那么只用考虑右树是否是二叉搜索树,所以return右树的结果就是整个的结果
return isBST(headnode->m_rightNode);
}
3、非递归中序遍历判断
bool isBSTUnRecur(BinaryNode* headnode) {
if (headnode != nullptr) {
int preValue = INT_MIN;
stack<BinaryNode*> stack;
stack.push(headnode);
while (stack.size() || headnode != nullptr) {
if (headnode->m_leftNode) {
stack.push(headnode->m_leftNode);
headnode = headnode->m_leftNode;
}else {
BinaryNode