zoukankan      html  css  js  c++  java
  • (算法)是否为二叉查找树的后序遍历数组

    题目:

    给定一数组,判断它是否为二叉查找树的后序遍历数组

    思路:

    想想,二叉查找数树的特点,任意根结点大于左子树的所有值,而小于右子树的所有值;

    再想想,后序遍历的特点,先遍历左子树,再遍历右子树,最后是根结点;

    因此很容易找到根结点,然后遍历数组找出左子树(从左往右比根结点小的),剩下右边的就是右子树,然后判断右子树是否都大于根结点:

    如果是,则递归遍历左子树,遍历右子树,如果都满足了,则是某个二叉树的后序遍历数组;

    如果不是,则不是。

    代码:

    #include<iostream>
    
    using namespace std;
    
    bool IsPostTraverse(int *A,int left,int right){
        if(left>=right)
            return true;
        else{
            int root=A[right];
            
            int idx=left;
            while(idx<right && A[idx]<root)
                idx++;
    
            int mid=idx;
            while(idx<right){
                if(A[idx]<root)
                    return false;
                else
                    idx++;
            }
    
            bool IsLeft=IsPostTraverse(A,left,mid-1);
            bool IsRight=IsPostTraverse(A,mid,right-1);
    
            if(IsLeft && IsRight)
                return true;
            else
                return false;
    
        }
    }
    
    int main(){
        int A[]={3,5,8,13,7,15,10};
        int n=sizeof(A)/sizeof(A[0]);
    
        cout << IsPostTraverse(A,0,n-1) <<endl;
    
        return 0;
    }
  • 相关阅读:
    Vue.js + Flask + echarts + MySQL
    一次挖矿处理
    Docker三剑客之Docker Swarm
    Malleable-C2-Profiles配置
    「持续更新中」最近浏览的网站心得总结
    有关虚拟内存的一点思考
    Qt---ToolBox自由伸展
    mindmaster导出markdown文档
    svg代码嵌入秀米的方法
    css3渐变透明度的写法
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4827549.html
Copyright © 2011-2022 走看看