博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(剑指Offer)面试题24:二叉搜索树的后序遍历序列
阅读量:4355 次
发布时间:2019-06-07

本文共 1338 字,大约阅读时间需要 4 分钟。

题目:

输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果,如果是则返回true,否则返回false。

假设输入的数组的任意两个数字都互不相同。

思路:

根据二叉搜索树的后序遍历特点,很容易可以判断该数组是否为后序遍历的结果。

在二叉搜索树的后序遍历序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为两部分,第一部分是左子树结点的值,他们都比根节点的值小;第二部分是右子树节点的值,他们都比根节点的值大。

因此,判断某数组是否为后序遍历的结果,可以先找到数组的最后一个数,即根节点的值,然后根据根节点的值找到第一部分(左子树,比根节点小),接着判断第二部分(右子树)的所有结点的值是否都比根节点的值大,如果不是,返回false。否则再判断第一部分和第二部分是否都为后序遍历结果(递归),如果是,则返回true。

类似题目:

将题目中的后序遍历改为先序遍历,思路一样。

代码:

#include 
using namespace std;bool VerifySequenceOfBST(int sequence[],int length){ if(sequence==NULL || length<=0) return false; int root=sequence[length-1]; int leftIndex=0; while(sequence[leftIndex]
0) left=VerifySequenceOfBST(sequence,leftIndex); bool right=true; if(leftIndex

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/a861533d45854474ac791d90e447bafd?rp=1

AC代码:

class Solution {public:    bool VerifySquenceOfBST(vector
sequence) { int length=sequence.size(); if(length<=0) return false; return VerifySquence(sequence,0,length-1); } bool VerifySquence(vector
sequence,int begin,int end) { if(begin>=end) return true; int root=sequence[end]; int leftIndex=begin; while(sequence[leftIndex]

转载于:https://www.cnblogs.com/AndyJee/p/4651655.html

你可能感兴趣的文章
Ubuntu上完美视频播放软件XBMC
查看>>
idea创建maven项目的一点关键
查看>>
python函数:递归
查看>>
nodejs
查看>>
DIV+CSS 斜线效果
查看>>
虚拟机访问共享空间的身份验证问题
查看>>
ble低功耗蓝牙GATT应用协议
查看>>
ThinkPHP的url简化
查看>>
List<T> 类相关排序
查看>>
Win2012R2 AD主域控登录密码忘记
查看>>
php增加自动刷新当前页面
查看>>
[阿里]逆序打印整数,要求递归实现
查看>>
TCP小结
查看>>
转 java的JsonObject对象提取值
查看>>
获取下拉列表的值
查看>>
oracle timestamp转换date及date类型相减
查看>>
win系统下nodejs安装及环境配置
查看>>
读《人工智能狂潮——机器人会超越人类吗?》笔记
查看>>
什么是设计模式?
查看>>
博客作业05--查找
查看>>