标签:bool 代码 个数 break 序列 div offer bre off
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
分析:
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
数组的最后一个元素是二叉搜索树的根结点的值,我们可以找到左子树的所有元素,那么另一部分就是右子树的所有元素。
如果右子树有值小于根结点,那么该数组就不是某二叉搜索树的后序遍历的结果。
代码:
1 class Solution { 2 public: 3 bool VerifySquenceOfBST(vector<int> sequence) { 4 int seqSize = sequence.size(); 5 if(seqSize == 0) return false; 6 if(seqSize == 1 || seqSize == 2) return true; 7 return IsSquenceOfBST(sequence, 0, seqSize - 1); 8 } 9 bool IsSquenceOfBST(vector<int> &sequence, int begin, int end) { // end是根结点的值 10 if(end - begin <= 2) return true; 11 int i; 12 for(i = begin; i < end; i++) { 13 if(sequence[i] > sequence[end]) { 14 break; 15 } 16 } 17 int m = i; // m前是左子树的值 18 for(; i < end; i++) { 19 if(sequence[i] < sequence[end]) { // 右子树还有比根结点的值要小,那么这数组就不是二叉搜索树的后序遍历的结果 20 return false; 21 } 22 } 23 return IsSquenceOfBST(sequence, begin, m - 1) && IsSquenceOfBST(sequence, m, end - 1); 24 } 25 };
标签:bool 代码 个数 break 序列 div offer bre off
原文地址:http://www.cnblogs.com/jacen789/p/7747635.html