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;
    }
  • 相关阅读:
    Datasnap http用户验证
    Delphi 接口机制真相
    tfmxobject的序列化
    delphi md5算法
    delphi xe 窗体子控件实现窗体拖动
    Delphi笔记-自定义组件
    DELPHI RES资源文件使用方法
    Delphi中WebBrowser的使用技巧汇总
    Delphi XE调用第三方库Jni详细过程
    使用VLC进行屏幕广播
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4827549.html
Copyright © 2011-2022 走看看