题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
1. 二叉搜索树:左子树永远比右子树小
2. 后序遍历:最后访问根节点
由上述两点可知:后序遍历序列的最后是根节点,可以将前面的部分分为比它小的左子树和比它大的右子树。
1、递归:
这道题很显然我们可以用递归的方法来做:只要我们判断当前序列的最后节点,可以将前面序列可以完全分解为左子树序列和右子树序列,并且这两个序列也满足这样的条件,那个这个序列就是正确的。
1)找到序列的最后一个元素a
2)判断a能否将序列完全分解成左子树序列和右子树序列
i = 0;
while(seq[i]<a)压入左子树;i++;
while(seq[i]>