判断是否为二叉树的后续遍历

来源:互联网 发布:战地之王刷枪软件 编辑:程序博客网 时间:2024/05/22 05:28

生气题目要求:

         判断整数序列是不是二元查找树的后续遍历结果。
        输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
        如果返回true,否则返回false.
     因此返回true.如果输入7,4,6,5,没有那棵树的后序遍历的结果是这个序列,因此返回false.

生气解析:

     这是二叉查找树树后序遍历重建问题。在这个问题中,最后一个元素是根。例子中二叉查找树的跟是8.So we can split the array by the root.

代码如下:
int is_post_traverse(int* arr, int len)
{
int *head, *pos, *p;
if (arr == NULL || len <= 0)
return 0;
if (len == 1)
return 1;
head = arr + len - 1;
p = arr;
while (*p < *head)
p++;
pos = p;
while (p < head)
{
if (*p < *head)
return 0;
p++;
}
if (!is_post_traverse(arr, pos - arr))
return 0;
return is_post_traverse(pos, head - pos);
}

0 0