判断一个数组是不是二元查找树后序遍历的结果

最主要是要知道后序遍历的特点

1. 数组最后一个元素为根节点.

2. 左子树所有节点在右子树的左边, 需要找出该分界点.

//递归实现


int isBTreee(int data[], int n)
{
int root;
int i;
int lLen = 0;
int right = 0;
int bRet1 = 1, bRet2  = 1;

if(n == 1)
return 1;

root = data[n-1];//找出root节点

//找出左右子树分界点
for(right = 0; right < n - 1; right++)
{
if(data[right] > root)
{
break;
}
}
lLen = right;

//如果右子树节点值小于根节点, 说明不是二叉树后序遍历的结果.
for(; right < n -1; right++)
{
if(data[right] < root)
{
return 0;
}
}
printf("lLen = %d\n", lLen);
if(lLen > 0)//存在左子树
bRet1 = isBTreee(data, lLen);
if(lLen < n -1)//存在右子树
bRet2 = isBTreee(&data[right], n - lLen -1);

return (bRet1 && bRet2);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值