js判断输入序列是否是二叉搜索树的后序遍历结果
思路:
1.空数组不是二叉搜索树的后序遍历结果;
2.长度小于4的非空数组一定是某个二叉搜索树的后序遍历结果;
3.后序遍历的结果形式为arr = [左子树的后续遍历,右子树的后续遍历,树根];
----arr[0]的每一项都小于树根,arr[1]的每一项都大于树根;
----arr[0],arr[1]以3的形式递归;
4.左子树空,arr = [右子树的后续遍历,树根];
----arr[0]的每一项都大于树根;
5.右子树空,arr = [左子树的后续遍历,树根];
----arr[0]的每一项都小于树根;
代码如下:
1 function VerifySquenceOfBST(arr) { 2 2 if(arr.length === 0) return false; 3 3 if(arr.length < 4) return true; 4 4 var r = arr[arr.length - 1]; //树根 5 5 var i = 0; 6 6 while((i < arr.length - 1) && (arr[i] < r)){ 7 7 i++; //左右子树分界线 8 8 } 9 9 if(!(arr.slice(0,i).every(function(x){return x<r})&&arr.slice(i,arr.length-1).every(function(x){return x>r}))){ 10 10 return false; 11 11 } 12 12 if(i>0&&i<arr.length-1){ 13 13 return VerifySquenceOfBST(arr.slice(0, i)) && VerifySquenceOfBST(arr.slice(i,arr.length-1)); 14 14 }else if(i>0){ 15 15 return VerifySquenceOfBST(arr.slice(0, i)); 16 16 }else if(i<arr.length-1){ 17 17 return VerifySquenceOfBST(arr.slice(i,arr.length-1)); 18 18 } 19 19 20 20 21 21 }