码迷,mamicode.com
首页 > 编程语言 > 详细

(算法)是否为二叉查找数的后序遍历数组

时间:2015-09-21 23:50:03      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:

题目:

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

思路:

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

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

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

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

如果不是,则不是。

代码:

#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;
}

 

(算法)是否为二叉查找数的后序遍历数组

标签:

原文地址:http://www.cnblogs.com/AndyJee/p/4827549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!