【二叉排序树】二叉排序树的后序遍历

【二叉排序树】二叉排序树的后序遍历_第1张图片

大致思路:

思路比较简单粗暴:先找到根节点,然后去遍历序列,找到第一个大于根节点值的元素则为左子树的开头,以此划分开左右子树,递归(二叉树一般都递归!!!!)

要注意的点在于,有可能某个根节点没有左子树和右子树,应该怎么处理; 递归的临界条件有哪些情况(只剩一个结点、只剩两个结点),如何对这些情况进行正确判断。

AC代码:

class Solution {
public:
    
    bool varify(vector s, int start, int end,int root)
    {
        if(start==end+1) //其实只有根节点
            return true;
        if(start==end) //除根节点外就一个元素了
            return s[start]root)||(s[start]root&&s[end]>root);
        }
        
        //找到以此root划分左子树右子树的地方
        int right_begin = 0;
        for(int i=start;iroot)
            {
                right_begin = i;
                break;
            }
        }
        
        //如果没有左子树
        if(right_begin==start)
            return varify(s,right_begin,end-1,s[end]);
        //如果没有右子树
        if(right_begin==0)
            return varify(s,start,end-1,s[end]);
        else
        {
            //右子树的元素是不是都大于root
            for(int i=right_begin;i sequence) 
    {
        if(sequence.size()==0)
            return false;
        return varify(sequence,0,sequence.size()-2,sequence[sequence.size()-1]);
    }
};

 

你可能感兴趣的:(保研机试,剑指Offer)