网站开发深圳公司,大创网,杭州网站制作,模板网站建站哪家好题目描述
输入一个整数数组#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路
比如下面的这棵二叉搜索树 它的后序遍历为0214369875#xff1b; 我们设当前根节点为root; 第一次…题目描述
输入一个整数数组判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路
比如下面的这棵二叉搜索树 它的后序遍历为0214369875 我们设当前根节点为root; 第一次root5 我们可以看出以3和6中间为分割线左边为5的左子树右边为5的右子树数组最后一个数为5为根结点。所以 {0,2,1,4,3}root;{6,9,8,7}root size–1; root 7; 去掉5最后一个数为7它是以5为根结点的右子树那么它肯定大于以5为根节点的左子树并且大于本身的左子树 {0,2,1,4,3}root;{6}root;{9,8}root; size–1; root 8; 当数据规模再减1时则走到了根结点的右子树的右子树那么此时的root它肯定大于以5为根节点的左子树和以7为根节点的左子树和自身的左子树小于自身的右子树 那么size–1一直持续下去数组最后一个根节点永远都是上述的结论就算到以5为根结点的左子树中也成立所以再这个持续的过程中一旦出现与上述结论相悖的情况就说明此数不是二叉搜索树 如果最后size为0了则说明此树为二叉所搜树。
class Solution {
public:bool VerifySquenceOfBST(vectorint sequence) {int size sequence.size(); //求出数组长度if(0size) //为0返回return false;int i 0;//去掉总根结点后数组最后一个元素就是右子树的根结点它的左子树都比它小右子树都比它大//那么size再--就到了右子树的右子树或者到左子树上述条件仍然成立while(--size){while(sequence[i]sequence[size]); //看左子树的值是不是都小于根结点while(sequence[i]sequence[size]); //右子树的值是不是都大于根结点if(isize) //如果最后i还没有和size相同返回错误return false;i 0;}return true;}
};