二叉搜索树的后序遍历序列

来源:互联网 发布:临沂淘宝代运营 编辑:程序博客网 时间:2024/06/08 03:09

题目:

输入一个整数数组,判断该数组是不是一颗二叉搜索树的后续遍历的结果,如果是返回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小的树//那就不是二叉搜索树,返回falseif(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);}

0 0
原创粉丝点击