二叉搜索树的验证思路如下:
当一颗树为二叉搜索树时,由中序递归遍历是从左下角的小树一直向右上方扩大的特点可得,它的中序遍历结果一定是单调递增的,因此我们可以获得两种思路:
(1)把遍历结果存入容器,循环比较看其是否单调递增
(2)从左下角的第一颗小树开始比较,一直到整颗二叉树
代码如下:
int treevalmin=INT-MIN;
bool solution(treenode*root)
{
if(root==NULL) return true;
//首先确定递归到叶子节点的终止条件显然叶子节点是不可避免的,返回true是必然的
bool lefttree=solution(root->left);
//拿到左树的真假值先
if(root->val>treemin)
{
treemin=root->val;
}
else
{
return false;
}
bool righttree=solution(root->right);
return lefttree&&righttree;
}
看起来本人再侃侃而谈,其实本人也觉得很不好理解:但任然可以总结为如下:再每次的两个递归中间比较是否递增,不递增便return false,否则便判断语句return lefttree&&righttree;