标签:
题目:
输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果,如果是返回true,否则返回false
分析:由于二叉搜索树的特性,左子树一定小于根节点,右子树一定大于根节点,所以在一颗二叉搜索树中不会出现两个相同的节点
bool IsBST(int arr[],int len) { assert(arr !=NULL); if(len < 0) return false; //首先由于二叉树的特性,所以根节点是最后一个节点 int root=arr[len-1]; int i=0; while(i <len-1) { //找到第一个比根节点大的节点,从这一分为二 //小于i的是根节点左子树,大于i的是右子树 if(arr[i] >root) break; ++i; } int j=i+1; while(j <len-1) { //由于二叉搜索树的性质,所以如果找到右子树中有比root小的树 //那就不是二叉搜索树,返回false if(arr[j] <root) return false; } //否则就递归的去从左右子树中继续找 bool leftchild=true; //从i下标隔开,小于i的是根节点左子树 //大于i下标的是右子树 if(i >0) leftchild=IsBST(arr,i); //递归右子树 bool rightchild=true; if(i < len-1) rightchild=IsBST(arr,len-i-1); //最后返回左右子树相 && 的结果 return (leftchild && rightchild); }
标签:
原文地址:http://blog.csdn.net/zhou753099943/article/details/51750270