您的位置:首页 > 其它

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

2015-04-24 22:08 267 查看



题目要求:

判断整数序列是不是二元查找树的后续遍历结果。
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果返回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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐