最主要是要知道后序遍历的特点
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);
}