二叉查找树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
后序遍历是指先左后右最后根,所以序列的最后是根节点。
- 由此可推出先找到根节点
- 满足左子树小于根节点,右子树大于根节点
- 递归比较每一个节点即可
function VerifySquenceOfBST(sequence)
{
// write code here
if(!sequence.length)return false;
return judge(sequence,0,sequence.length-1);
}
function judge(a,l,r){
if (l >= r) return true;
let i = r;
///找到左子树查找到右子树的位置i
while (a[i - 1] > a[r] && i > l) i--;
///左子树需要全部小于根节点
for (let j = i - 1; j >= l; j--){
if(a[j]>a[r])return false;
}
///满足根节点后需要继续看第二层的根节点是否也满足以上,也就是递归
return judge(a,l,i-1)&&judge(a,i,r-1);
}