八:二叉搜索树的后序遍历
2015-07-09 22:28
204 查看
二叉搜索树:(又称:二叉查找树,二叉排序树)
满足性质:
(1) 它或者是一棵空树;
(2) 或者是具有下列性质的二叉树:
<1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
<2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
<3> 左、右子树也分别为二查找序树;
问题描述:
输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。
解析:
根据后序遍历的定义,如果一个序列是二叉树的后续遍历的结果,那么我们不难得出,序列的最后一个节点必定是二叉树的根节点,除了根节点外,序列中前一部分是二叉树的左子树的节点,后面一部分是二叉树的右子树的节点。同理,左右子树的遍历结果也具有一样的特点。
代码如下:
bool VerifySquenceOfBST(int sequence[], int length)
{
if(sequence== NULL || length <= 0)
returnfalse;
int root =sequence[length - 1];
// 在二叉搜索树中左子树的结点小于根结点
int i = 0;
for(; i <length - 1; ++ i)
{
if(sequence[i] > root)
break;
}
// 在二叉搜索树中右子树的结点大于根结点
int j = i;
for(; j <length - 1; ++ j)
{
if(sequence[j] < root)
return false;
}
// 判断左子树是不是二叉搜索树
bool left =true;
if(i > 0)
left =VerifySquenceOfBST(sequence, i);
// 判断右子树是不是二叉搜索树
bool right =true;
if(i <length - 1)
right =VerifySquenceOfBST(sequence + i, length - i - 1);
return (left&& right);
}
注:《剑指offer》学习笔记
满足性质:
(1) 它或者是一棵空树;
(2) 或者是具有下列性质的二叉树:
<1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
<2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
<3> 左、右子树也分别为二查找序树;
问题描述:
输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。
解析:
根据后序遍历的定义,如果一个序列是二叉树的后续遍历的结果,那么我们不难得出,序列的最后一个节点必定是二叉树的根节点,除了根节点外,序列中前一部分是二叉树的左子树的节点,后面一部分是二叉树的右子树的节点。同理,左右子树的遍历结果也具有一样的特点。
代码如下:
bool VerifySquenceOfBST(int sequence[], int length)
{
if(sequence== NULL || length <= 0)
returnfalse;
int root =sequence[length - 1];
// 在二叉搜索树中左子树的结点小于根结点
int i = 0;
for(; i <length - 1; ++ i)
{
if(sequence[i] > root)
break;
}
// 在二叉搜索树中右子树的结点大于根结点
int j = i;
for(; j <length - 1; ++ j)
{
if(sequence[j] < root)
return false;
}
// 判断左子树是不是二叉搜索树
bool left =true;
if(i > 0)
left =VerifySquenceOfBST(sequence, i);
// 判断右子树是不是二叉搜索树
bool right =true;
if(i <length - 1)
right =VerifySquenceOfBST(sequence + i, length - i - 1);
return (left&& right);
}
注:《剑指offer》学习笔记
相关文章推荐
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列------剑指offer面试题33
- 【安全加密技术】 对称加密
- 【安全加密技术】--对称加密
- Python中的__new__()方法与实例化
- Android studio导入eclipse项目且不改变目录结构
- Python基本语法
- xml.etree.ElementTree
- What is the behavior of lnk files?
- ISO/IEC 9899:2011 条款6.2.3——标识符的名字空间
- 南阳oj 题目101 两点距离
- 转:认识MyBean
- 插入排序
- 大数据开源列式存储引擎Parquet和ORC
- leetcode Reverse integer
- 关于Oracle索引建立的几个注意要点
- 鼠标移到datalist或者是grivdview上显示全部内容
- 二叉堆
- 鼠标移到datalist或者是grivdview上显示全部内容
- hadoop 2.7.0版本发布