前言有一个整型数组。如何判断数组是否是二叉树后序遍历的结果?本文将把这个算法分享给大家。欢迎有兴趣的开发者阅读本文。思路分析我们通过一个例子来分析这个问题,如下图是一棵二叉树。通过上一篇文章(二叉树的后序遍历)的学习,我们可以很快看出这棵树的后序遍历序列为:[5,7,6,9,11,10,8].经过观察,我们发现最后一个数是二叉树的根节点。数组前面的数可以分为两部分:第一部分是左子树节点的值,小于根节点的值,第二部分是右子树节点的值。都大于根节点的值在上面的后序遍历结果数组中,前三个数5、7、6都小于根节点8,也就是它的左子树节点;最后三个数字9、11、10比根节点8大,是它的右子树节点。然后,我们可以用同样的方法来确定数组的每一部分对应的子树的结构。数组5,7,6,最后一个数字6是左子树根节点的值。数字5比6小,是6的左子节点,7是它的右子节点数组9、11、10,最后一个数字10是左子树根节点的值。数字9比10小,是10的左子节点,11是它的右子节点。通过以上分析,我们可以总结出实现思路。最后一项必须是根节点。从根节点前面的值找到左右子树的边界点。定义指针leftIndex。前半部分必须是它的左子树。每个节点的值都小于根节点。leftIndex默认从0开始,逐渐递增,找一个比根节点大的值,就是它们的边界点定义指针rightIndex,后半部分一定是它的右子树,每个节点的值都比根节点大。rightIndex从分界点开始查找(默认从leftIndex位置开始),如果有小于根节点的值,那么这个序列一定不属于二叉树的后序遍历序列。如果leftIndex指针离开起始位置(0),则证明其左子节点还没有找到,需要重复上述过程继续查找(递归找到数组的leftIndex位置)。如果leftIndex指针没有到达数组末尾,证明还没有找到它的右子节点,需要重复以上过程继续查找(递归从leftIndex+1位置开始)返回递归验证左右子树的结果(都为真,说明这个序列是二叉树的后序遍历序列)实现了代码,思路清晰了,我们就可以顺利的将代码写出来了。verifySequenceOfBST(sequence:Array
