判断数组是不是某二元查找树的后序遍历_Glodon(2)_20160921

来源:互联网 发布:数据库服务端和客户端 编辑:程序博客网 时间:2024/05/16 10:29

题目描述
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。

输入描述:
|| 输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

      8    /  \   6    10 / \    / \5   7  9   11

输出描述:
|| 返回 true。

输入描述:
|| 输入7、4、6、5,没有哪棵树的后序遍历结果是这个序列。
输出描述:
|| 返回 false。

源代码如下:

bool isPostOrderBST(int squence[], int length){      if(squence == NULL || length <= 0)            return false;      // 二元查找树的根节点是其后序遍历数组的最后一个元素      int root = squence[length - 1];      // 其左子树的节点一定比根节点的值小      int i = 0;      for(; i < length - 1; ++ i)      {            if(squence[i] > root)                  break;      }      // 右子树的节点一定比根节点大      int j = i;      for(; j < length - 1; ++ j)      {            if(squence[j] < root)                  return false;      }      // 判断左子树是否为二元查找树      bool left = true;      if(i > 0)            left = isPostOrderBST(squence, i);      // 判断右子树是否为二元查找树      bool right = true;      if(i < length - 1)            right = verifySquenceOfBST(squence + i, length - i - 1);      return (left && right);}
0 0