题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
样例
Input: [4, 8, 6, 12, 16, 14, 10]
Output:true
解题思路
-
描述
关于二叉搜索树的后序遍历的顺序为“左右根”,而且左子树各节点值小于根节点,右子树各节点值大于根节点。递归判断即可。
-
实现代码:
vector<int> postorder; // 定为全局变量,方便程序书写 bool verifySequenceOfBST(vector<int> sequence) { postorder = sequence; return dfs(0,postorder.size() - 1); } bool dfs(int pl,int pr) { if(pl >= pr) //表明为空或为根节点,返回true { return true; } int index; int root = postorder[pr]; for(index = pl; index < pr; index++) // 定为到第一个大于根节点的下标 { if(postorder[index] > root) { break; } } for(int j = index; j < pr; j++) // 自该节点后如果还存在小于根节点的值,则返回false { if(postorder[j] < root) { return false; } } return dfs(pl,index - 1) && (index,pr - 1); // 递归处理左右子树 }