题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/
/
6 10
/ / / /
5 7 9
11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
- ool IsBstPostOrder(int *a,int low, int high)
- {
- if (high - low > 1)
- {
- int root = a[high];
- int left,right;
- for ( left = low; left < high-1; )
- {
- if (a[left] < root) left++;
- else break;
- }
- for (right = high-1; right > low; )
- {
- if (a[right] > root) right--;
- else break;
- }
- if (left != right + 1) return false;
- bool leftflag = IsBstPostOrder(a,low,right);
- bool rightflag = IsBstPostOrder(a,left,high-1);
- return leftflag && rightflag;
- }
- return true;
- }
阅读(2186) | 评论(0) | 转发(1) |