判断整数序列是否是二叉查找树的后序遍历
2015-08-26 22:45
239 查看
这是一道面试题,解题的代码如下(我这里把有重复节点的序列排除了,这里的二叉树不允许有相同值得节点):
bool JudgeListIsBSTreePostOrder(int* iArray, int nLeft, int nRight)
{
if (nLeft == nRight)
{
return true;
}
int nMidValue = iArray[nRight];
int nSubLeft = nLeft;
int nSubRight = nRight;
for (int i = nLeft; i < nRight; i++)
{
if (iArray[i] > nMidValue)
{
nSubRight = i;
break;
}
else if(iArray[i] == nMidValue)
{
return false;
}
}
if (nSubRight > nSubLeft)
{
if (JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight-1) == false)
{
return false;
}
}
//如果到尾部了,则无需检查右子树了
if (nSubRight == nRight)
{
return true;
}
nSubLeft = nSubRight;
nSubRight = nRight-1;
for (int i = nSubLeft; i < nRight; i++)
{
if (iArray[i] <= nMidValue)
{
return false;
}
}
return JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight);
}
bool JudgeListIsBSTreePostOrder(int* iArray, int nLeft, int nRight)
{
if (nLeft == nRight)
{
return true;
}
int nMidValue = iArray[nRight];
int nSubLeft = nLeft;
int nSubRight = nRight;
for (int i = nLeft; i < nRight; i++)
{
if (iArray[i] > nMidValue)
{
nSubRight = i;
break;
}
else if(iArray[i] == nMidValue)
{
return false;
}
}
if (nSubRight > nSubLeft)
{
if (JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight-1) == false)
{
return false;
}
}
//如果到尾部了,则无需检查右子树了
if (nSubRight == nRight)
{
return true;
}
nSubLeft = nSubRight;
nSubRight = nRight-1;
for (int i = nSubLeft; i < nRight; i++)
{
if (iArray[i] <= nMidValue)
{
return false;
}
}
return JudgeListIsBSTreePostOrder(iArray, nSubLeft, nSubRight);
}
相关文章推荐
- wxhl ios bj 49期 张浩 学习心得体会文章连载 第7章
- Python的with...as的用法
- TCP实现P2P通信、TCP穿越NAT的方法、TCP打洞
- HDU 4468
- Linux内核中的cmpxchg函数
- 1005. Spell It Right (20)水题
- Qt知识点、疑难杂症的治疗
- Linux磁盘管理与文件系统
- TCP/IP
- HDU2955Robberies (0-1背包问题)
- WinCE中串口驱动及接口函数介绍
- hdoj 2016 数据的交换输出
- 黑马程序员--Java集合框架(三)
- Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference
- 第37讲:List的foldLeft、foldRight、sort操作代码实战
- sqlserver中的存储过程 函数 事物 索引及视图
- 07 java.lang.StringBuilder
- 类的继承和多态
- 软件随想
- 树莓派修改更新源