[Leetcode]Verify Preorder Sequence in Binary Search Tree

来源:互联网 发布:杨米尔斯理论 知乎 编辑:程序博客网 时间:2024/06/04 23:35
Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary search tree.
You may assume each number in the sequence is unique.
Follow up:
Could you do it using only constant space complexity?

void partion(vector<int>&preorder,int start,int end,int &right){int root = preorder[start];for(int i = start + 1;i < end;i++){if(preorder[i] > root){right = i;break;}}}//[start,end)bool verifyPreorderSub(vector<int>&preorder,int start,int end){if((end-start) < 2)return true;int root = preorder[start];//divide array into two partsint left = start + 1,right = end;partion(preorder,start,end,right);//check BST propertyfor(int i = left;i < right;i++){if(preorder[i] > root)return false;}for(int i = right;i < end;i++){if(preorder[i] < root)return false;}return verifyPreorderSub(preorder,left,right)&&verifyPreorderSub(preorder,right,end);}/*algorithm brute force1)A[0] is root, divide A[1..n] into two parts A[1,right-1] and A[right,n]2)check each element A[i] in left tree A[i] < root and each element A[j] in right tree, A[j] > root3)recrusive call preorder for child array A[1..,right-1] and A[right,n] time O(n*n) space O(1)*/bool verifyPreorder(vector<int>&preorder) {return verifyPreorderSub(preorder,0,preorder.size());}



0 0
原创粉丝点击