面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。
1 bool isPostOrder(vector<int>&num, int left, int right) 2 { 3 if (left == right) 4 return true; 5 int i = left; 6 for (; i < right; ++i) 7 {//找到左右子树的分界点 8 if (num[i] > num[right]) 9 break; 10 } 11 //判断右子树中的所有元素是否都大于根元素 12 for (int j = i; j < right; ++j) 13 if (num[j] < num[right]) 14 return false; 15 16 if (i==right) 17 return isPostOrder(num,left,i-1); 18 else 19 return isPostOrder(num,left,i-1) && isPostOrder(num,i,right-1); 20 } 21 bool isPostOrder(vector<int>&num) 22 { 23 if (num.size()==0) 24 return false; 25 return isPostOrder(num,0, num.size()-1); 26 }