【剑指Offer】23、二叉搜索树的后序遍历序列

news/2024/12/29 22:45:28/

  题目描述:

  输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

  解题思路:

  对于后续遍历序列,序列的最后一个值一定是树的根结点,而由二叉搜索树的性质:左小右大,我们可以从头开始遍历,当遍历到某个值比根结点大时停止,记为flag,此时flag之前的所有数值都是二叉搜索树的左子树的结点,flag以及flag之后的所有数都是二叉搜索树的右子树的结点。这是由二叉搜索树以及后序遍历共同决定的。

  接下来,我们就可以把任务交给递归,同样的方法去判断左子树和右子树是否是二叉搜索树,这显然是典型的递归解法。

  举例:

  以{5,7,6,9,11,10,8}为例,后序遍历结果的最后一个数字8就是根结点的值。在这个数组中,前3个数字5、7和6都比8小,是值为8的结点的左子树结点;后3个数字9、11和10都比8大,是值为8的结点的右子树结点。

  我们接下来用同样的方法确定与数组每一部分对应的子树的结构。这其实就是一个递归的过程。对于序列5、7、6,最后一个数字6是左子树的根结点的值。数字5比6小,是值为6的结点的左子结点,而7则是它的右子结点。同样,在序列9、11、10中,最后一个数字10是右子树的根结点,数字9比10小,是值为10的结点的左子结点,而11则是它的右子结点,所以它对应的二叉搜索树如下:


1608161-20190430150817750-1287866411.png

  编程实现(Java):

public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {if(sequence==null||sequence.length==0)return false;return VerifySquenceOfBST(sequence,0,sequence.length-1);}public boolean VerifySquenceOfBST(int [] sequence,int begin,int end){if(end<=begin) //结束条件return true;//end为根节点,找左右子树的分界int i=begin;for(;i<end;i++) //找边界,并同时判断了左子树都小于根if(sequence[i]>sequence[end])break;for(int j=i+1;j<end;j++) //右子树如果存在小于根的,则不是二叉搜索树if(sequence[j]<sequence[end])return false;return VerifySquenceOfBST(sequence,begin,i-1) && VerifySquenceOfBST(sequence,i,end-1);}
}

转载于:https://www.cnblogs.com/gzshan/p/10796115.html


http://www.ppmy.cn/news/610824.html

相关文章

为x86 CPU自动调度神经网络

为x86 CPU自动调度神经网络 对特定设备和工作负载进行自动调试对于获得最佳性能至关重要。这是有关如何使用自动调度器为x86 CPU调试整个神经网络的文档。 为了自动调试神经网络&#xff0c;将网络划分为小的子图&#xff0c;并对其进行独立调试。每个子图被视为一个搜索任务。…

Could not download lint-gradle.jar (com.android.tools.lint:lint-gradle:26.4.

后面提示 No cached version available for offline mode offline 这个自己刚刚设置了下&#xff0c;打包运行就出现了问题 处理方法就是把这个勾选去掉 看下图

电商售后业务流程图

1.取消订单2.申请退货3.申请换货

Android 双屏开发 Presentation 的使用教程

使用Presentation 开发双屏 可以把Presentation 理解为一个特殊的Dialog 如果不知道Presentation 的使用&#xff0c;就简单的理解为类似自定义Dialog 下面来简单的演示下Presentation的使用 随便取一个名字ScreenPresentation 继承 Presentation 由于是要展示效果&#xf…

HDU - 2181-哈密顿绕行世界问题

一个规则的实心十二面体&#xff0c;它的 20个顶点标出世界著名的20个城市&#xff0c;你从一个城市出发经过每个城市刚好一次后回到出发的城市。 Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<20,m>1.m0退出. Output输出从第m个城…

自动调度GPU的卷积层

自动调度GPU的卷积层 这是有关如何对GPU使用自动调度程序的文档。 与依靠手动模板定义搜索空间的基于模板的autotvm不同&#xff0c;自动调度程序不需要任何模板。用户只需要编写计算声明&#xff0c;而无需任何调度命令或模板。自动调度程序可以自动生成较大的搜索空间&#x…

Android Intent hasExtra()方法的使用

看下源码 /*** Returns true if an extra value is associated with the given name.* param name the extras name* return true if the given extra is present.*/public boolean hasExtra(String name) {return mExtras ! null && mExtras.containsKey(name);} 布尔…

MySQL慢查询分析工具pt-query-digest详解

一、简介pt-query-digest是用于分析mysql慢查询的一个工具&#xff0c;它可以分析binlog、General log、slowlog&#xff0c;也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中&#xff0c;分析过程是先对查询语句的条件进行…