面试题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 }
原文地址:https://www.cnblogs.com/happygirl-zjj/p/4618795.html