【剑指offer24】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
2017-08-25 20:48
861 查看
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
首先二叉搜索树的性质就是左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。,后序遍历即(左
右 根)
这道题和重建二叉树的思想一样,首先找到根节点,最后划分出左子树和右子树,遍历整个数组,从左开始找到比根节点值大的停下来,那么从最左边开始到此节点就是左子树的范围,接着此节点到根节点的前一个节点就是右子树的范围(在这段区间遍历的时候如果发现有节点的值比根节点的值小,则说明一定不是二叉排序树)
接着递归的划分做左右子树继续遍历,如果我们i==0说明左子树已经判断完成了,不需要再次递归划分了,如果i==len-1说明我们的右子树也已经判断完成了,不需要再次划分了。
首先二叉搜索树的性质就是左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。,后序遍历即(左
右 根)
这道题和重建二叉树的思想一样,首先找到根节点,最后划分出左子树和右子树,遍历整个数组,从左开始找到比根节点值大的停下来,那么从最左边开始到此节点就是左子树的范围,接着此节点到根节点的前一个节点就是右子树的范围(在这段区间遍历的时候如果发现有节点的值比根节点的值小,则说明一定不是二叉排序树)
接着递归的划分做左右子树继续遍历,如果我们i==0说明左子树已经判断完成了,不需要再次递归划分了,如果i==len-1说明我们的右子树也已经判断完成了,不需要再次划分了。
bool VerifySquenceOfBST(vector<int> sequence) { return _VerifySequenceOfBST(sequence); } bool _VerifySequenceOfBST(vector<int> sequence) { if(sequence.empty()) { return false; } vector<int>leftTree; vector<int>rightTree; int len=sequence.size(); int i=0; int root=sequence[len-1]; for(i=0;i<len-1;i++) { if(sequence[i]>root) { break; } } int j=i; for(;j<len-1;++j) { if(sequence[j]<root) { return false; } } if(i>0) { for(int k=0;k<i;k++) { leftTree.push_back(sequence[k]); } } if(i<len-1) { for(int m=i;m<len-1;m++) { rightTree.push_back(sequence[m]); } } bool left=true; if(i>0) { left=_VerifySequenceOfBST(leftTree); } bool right=true; if(i<len-1) { right=_VerifySequenceOfBST(rightTree); } return left&&right; }
相关文章推荐
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- java 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 《剑指Offer》输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 剑指offer_输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- Java实现:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- java实现输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果
- 输入一个整数数组,判断该数组是不是某个二叉搜索树的前序遍历结果
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)
- 【数据结构】【输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果】
- 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- java 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- 二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列
- 判断一个整数数组是不是二叉搜索树的后序遍历序列
- 输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT” (要求用条件表达式进行判断,不使用if语句)