剑指offer——35二叉树的后序遍历
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
题解:
这道题,一开始以为将后序遍历排序后的得到中序遍历,然后利用后序遍历和中序遍历进行二叉树的重组,但是由于后序遍历未必是BST树的,故得到的中序遍历未必是正确的;
所以,根据后序遍历,直接对树的左右子树进行判断。
1 class Solution { 2 public: 3 bool VerifySquenceOfBST(vector<int> sequence) { 4 if (sequence.size() == 0)return false; 5 return isBST(sequence, 0, sequence.size() - 1); 6 } 7 bool isBST(vector<int>v, int L, int R) 8 { 9 if (L >= R)return true; 10 int root = v[R]; 11 int i = L; 12 while (v[i] < root)++i;//找到左子树 13 int j = i; 14 while (j < R)if (v[j++] < root)return false;//判断右子树 15 return isBST(v, L, i - 1) && isBST(v, i, R - 1); 16 } 17 };