用迭代的方式,emmmmm,栈就用顺序表了,懒得写链栈,注释挺详细的
//验证二叉搜索树
bool isValidBST(struct TreeNode* root)
{
struct TreeNode* search;
struct TreeNode* stack[10000] = { NULL };
int top;
int button;
int list[10000];
int i = 0;
if (!root)
{
return true;
}
//初始化栈
top = button = 0;
//搜索指针初始化
search = root;
do
{
//有左孩子就入栈
while (search != NULL)
{
stack[++top] = search;
search = search->left;
}
//栈不为空
if (top != button)
{
//出栈
search = stack[top--];
//访问结果输入到顺序表里
list[i] = search->val;
//因为二叉搜索树中序遍历是升序输出
//所以当当前的元素大于等于前驱则为false
if (i >= 1 && list[i] <= list[i-1])
{
return false;
}
//顺序表index后移
i++;
//右进一步
search = search->right;
}
} while (top != button || search != NULL); //栈空判断
return true;
}
嘿嘿嘿