判断整数序列是不是二元查找树的后序遍历结果

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。

如果是返回true,否则返回false。

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

8

/ \

6 10

/ \ / \

5 7 9 11

因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

  

思路:后序遍历结果数组的最后一个元素为根节点。

根节点的左子树全部小于根节点

根节点的右子树全部大于根节点

递归遍历左右子树是否二叉树

 1 bool IsSearchBinaryTree( int a[ ], int n )  // a 为序列,n 为序列个数
 2 {
 3     if ( n == 0 )
 4         return true;
 5     if ( n < 3 )
 6         return false;
 7     if ( n == 3 )
 8     {
 9         if ( a[ 0 ] < a[ 2 ] && a[ 1 ] > a[ 2 ] )
10             return true;
11         else
12             return false;
13     }
14 
15     for ( int i = 0; i < n-1; i++ )    // i 在这里是下标,主意当if条件不满足跳出时,i 是个数
16         if ( a[ i ] > a[ n-1 ] )
17             break;
18     
19     return ( IsSearchBinaryTree( a, i ) && IsSearchBinaryTree( a + i, n-i-1 )  );   // i 是左子树的元素个数,n-i-1是右子树的元素个数
20 }

posted on 2012-04-06 15:34  NLP新手  阅读(276)  评论(0编辑  收藏  举报

导航