题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回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 }