程序员面试题100题第06题——判断整数序列是不是二元查找树的后序遍历结果
题目:略
分析:考虑二元查找树的后序遍历结果最后一位必是根节点,序列的前部分为树的左子树,后部分为右子树,
其中左子树上的节点值都小于根节点的值,右子树上的节点值都大于于根节点的值。
这样就成了一个 递归的操作。
即把序列按照比根节点大小的关系分为左右两个部分,我们递归确认左右两部分是不是二元查找树的后序遍历结果即可。
代码:
int VertifySquenceOfBst(element list[], int length) { if(list ==NULL || length<=0) { return 0; } int i=0; int j=0; element root =list[length-1]; while(i<length-1) { if(list[i]<root) ++i; else break;//找到第一个大于根结点的值下标 } j=i; while(j<length-1) { if(list[j]<root) return 0;//右部分存在小于根结点的值,则不是后序遍历结果 else ++j; } //递归检查两个分区left,right是不是 int left=1; if(i>0) left=VertifySquenceOfBst(list,i); int right=1; if(i<length-1) right=VertifySquenceOfBst(list+i,length-i-1); return (left&&right); }