牛客网&剑指Offer&二叉搜索树的后序遍历

牛客网&剑指Offer&二叉搜索树的后序遍历

在这里插入图片描述
代码实现

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size() == 0)
            return false;
        int len = 0;
        int Lindex = 0;
        int Rindex = 0;
        int RootValue = 0;
        vector<int> leftvec;
        vector<int> rightvec;

        len = sequence.size();
        RootValue = sequence[len-1];
        
        for( ; Lindex < len; ++Lindex)
        {
            if(sequence[Lindex] > RootValue)
               break;           
        }
        
        Rindex = Lindex + 1;
        for( ; Rindex < len; ++Rindex)
        {
            if(sequence[Rindex] < RootValue)
                return false;
        }
        
        bool leftflag =  true;
        if(Lindex > 0)
        {
            for(int i = 0; i <= Lindex; i++)
            {
            leftvec.push_back(sequence[i]);
            } 
            VerifySquenceOfBST(leftvec);
        }       
       
        bool rightflag =  true;
        if(Rindex < len - 1)
        {
            for(int i =  Lindex + 1; i <= len; i++)
            {
            rightvec.push_back(sequence[i]);
            } 
              VerifySquenceOfBST(rightvec);
        }

        return (leftflag && rightflag);
    }
};

代码实现&错误:内存超限:您的程序使用了超过限制的内存

class Solution {
public:
	bool VerifySquenceOfBST(vector<int> sequence) {
		if (sequence.size() == 0)
			return false;
		int len = 0;
		int Lindex = 0;
		int Rindex = 0;
		int RootValue = 0;
		vector<int> leftvec;
		vector<int> rightvec;

		len = sequence.size();
		RootValue = sequence[len - 1];

		for (; Lindex < len; ++Lindex)
		{
			leftvec.push_back(sequence[Lindex]);
			if (sequence[Lindex] > RootValue)
				break;
		}

		Rindex = Lindex + 1;
		for (; Rindex < len; ++Rindex)
		{
			rightvec.push_back(sequence[Lindex]);
			if (sequence[Rindex] < RootValue)
				return false;
		}


		bool leftflag = true;
		VerifySquenceOfBST(leftvec);


		bool rightflag = true;
		VerifySquenceOfBST(rightvec);

		return (leftflag && rightflag);
	}
};

编程笔记

  • 代码实现解题思路:1.明确搜索二叉树的性质;2.后序遍历,则最后一个数字为根节点的值。3.根据搜索二叉树的性质将数组的大小划分为两部分,比根节点划分为小的划分为左子树部分,另一部分为右子树部分,此时判断右子树部分是否有小于根节点数值的值,若有则该树并不是搜索二叉树。4.将左子树以及右子树循环递归执行操作3。
  • 二叉树搜索的性质
    二叉搜索树性质参考链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值