zoukankan      html  css  js  c++  java
  • 每天一道算法题(5)——判断整数序列是否是二叉查找树后序遍历结果

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

              例如 输入576911108     true
                     输入7465                      false


    1.思路

        二叉查找树:左右子树均为二叉查找树,在此基础上,左子树的最大值(即最右节点)小于和右子树的最小值(即最左节点)大于根节点。

          1)使用递归。结束条件,仅有<=2个节点的序列一定是查找树。
          2)以小于根节点的第一个节点作为左子树的根节点,划分左右子树。递归判断子树是否为查找树。
          3)在此条件上,满足左子树最大值仍小于根节点值(步骤2中,保证右子树全部大于根节点,故右子树的最小值情况不用判断)

       


    2.程序

    bool verify(int *data,int length){//length为序列长度
        if(length<=2)
    	     return true;
    	else{
    	     
    		 bool left=false,right=false;
    		
    		 int j=length-2;
    		 int* root=data+length-1;
    		 for(;j>=0&&*(data+j)>*root;j--);
    		 
    		 left=verify(data,j+1);
    		 right=verify(data+j+1,length-j-2);
    		 
    		 if(left&&right&&(j<=0||*(data+j-1)<*root))//左子树仅有1个点或者没有节点的情况,不用判断左子树的最小值
    		      return true;
    		 
    	}
    	return false;
    }

      

       sizeof此时可用来判断数组的长度。
    	int data[]={7,4,6,5};
    	bool flag=verify(data,sizeof(data)/sizeof(int));
    
    

         


  • 相关阅读:
    easyui的treegrid实现树型向上汇总功能
    webwork使用ajax传递实体类数据
    通过shape-outside来设置文字环绕时的形状
    CSS隐藏元素的N种实现方式。
    让文字飞一会~~~
    CSS技能汇总,研究及实践
    纯CSS实现JS效果研究
    移动端BUG汇总
    CSS3妙用
    利用border属性制作各种图形。
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5393046.html
Copyright © 2011-2022 走看看