题目给定一个整数数组,你需要验证它是否是一个正确的二叉搜索树的前序遍历序列。您可以假设序列中的数字都是不同的。参考如下二叉查找树:5/\26/\13###示例示例1:输入:[5,2,6,1,3]输出:false示例2:输入:[5,2,1,3,6]Output:true解决二叉搜索树问题首先,我们要知道什么是二叉搜索树。二叉搜索树(又作:二叉搜索树、二叉排序树)它要么是一棵空树,要么是一棵具有以下性质的二叉树:如果它的左子树不为空,那么左上所有节点的值子树小于其根节点的值;如果它的右子树不为空,则右子树上所有节点的值都大于它的根节点的值;它的左子树和右子树也是二叉排序树。二叉查找树作为一种经典的数据结构,不仅具有链表快速插入和删除操作的特点,还具有数组快速查找的优点;所以它被广泛使用,例如,它通常用于文件系统和数据库系统。用于高效排序和检索操作的数据结构。简单来说,二叉搜索树就是一棵二叉树,它需要具备以下特性:它要么是一棵空树,要么是一棵具有以下性质的二叉树:如果它的左子树不为空,则左子树上所有节点的值都小于其根节点的值;如果它的右子树不为空,则右子树上所有节点的值都大于它的根节点的值;它的左右子树也分别是二叉排序树。前序遍历前序遍历也称为根优先遍历、前序遍历,可以记为根左后右(二叉树的父节点先左后右下)。先访问根节点,然后遍历左子树,最后遍历右子树。遍历左右子树时,还是先访问根节点,再遍历左子树,最后遍历右子树,如果二叉树为空则返回。解题思路是因为二叉查找树具有“左子树上所有节点的值都小于其根节点的值,右子树上所有节点的值都是大于其根节点的值”,所以我们可以从这个特性出发,如果能找到左子树大于根节点或者右子树小于根节点的值,说明数组队列不满足二叉树的特性搜索树。代码/***@param{number[]}preorder*@return{boolean}*/varverifyPreorder=function(preorder){letq=[],flag=-Infinity;for(letpofpreorder){//如果小于p,则可以判断为左子树节点,为当前子树的根节点,弹出。flag应该是当前数组的最小值while(q.length&&q[0]
p)returnfalse;q.unshift(p);}返回真;};来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。