剑指——二叉搜索树的后序遍历序列

0人阅读 评论(0) 收藏 举报
分类:

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意俩个数字都互不相同

思路:后序遍历得到的序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为俩部分 第一部分是左子树节点的值,它们都比根节点的值小 第二部分是右子树节点的值,它们都比根节点大

#include <stdio.h>
#include <iostream>
using namespace std;

//判断此数组是不是某二叉树搜索树的后序遍历的结果
bool VerifySquenceOfBST(int sequence[],int length) //参数1是该数组 参数2是数组的大小
{
    if(sequence==NULL || length<=0)
        return false;
    int root=sequence[length-1];  //根据二叉搜索树后序遍历的性质,数组最后一个数为树的根
    //先找到数组中的左右子树分界点 因为搜索树中根的左子树都小于根,右子树都大于根
    int i=0;
    for(;i<length-1;++i)
    {
        if(sequence[i]>root)
            break; //发生break处的位置的i值就是第一个右子节点出现的位置
    }

    int j=i;
    for(;j<length-1;++j)  //判断数组对应的右子树中的节点是否都大于根节点
    {
        if(sequence[j]<root)
            return false;
    }

    //判断左子树是不是二叉搜索树
    bool left=true;
    if(i>0)
        left=VerifySquenceOfBST(sequence,i);

    //判断右子树是不是二叉搜索树
    bool right=true;
    if(i<length-1)
        right=VerifySquenceOfBST(sequence+i,length-i-1);

    return (left && right);
}

int main()
{
    int array[]={5,7,6,9,11,10,8};

    if(VerifySquenceOfBST(array,sizeof(array)/sizeof(array[0])))
        cout<<"It is an Binary search tree"<<endl;
    else
        cout<<"It is not an Binary search tree"<<endl;

    return 0;
}

查看评论

【剑指offer】二叉搜索树的后序遍历序列

剑指offer上的第24题,主要考察递归思想,九度OJ上AC。 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数...
  • mmc_maodun
  • mmc_maodun
  • 2014年05月19日 08:18
  • 2800

剑指offer 二叉树与二叉搜索树最佳解汇总 Python

面试题6: 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历...
  • wstcjf
  • wstcjf
  • 2017年09月23日 13:43
  • 215

剑指offer--面试题24:二叉搜索树的后序遍历序列--Java实现

题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是返回true,否则返回false。假设输入的数组的任意两个数字互不相同。解题思路: 要明确两个概念: 1. 二叉...
  • u012289407
  • u012289407
  • 2015年06月21日 16:28
  • 894

[leetcode 255] Verify Preorder Sequence in Binary Search Tree ---先序遍历验证二叉搜索树

Question: Given an array of numbers, verify whether it is the correct preorder traversal sequence o...
  • Xiaohei00000
  • Xiaohei00000
  • 2016年03月08日 23:07
  • 473

二叉搜索树的后序遍历序列(Java实现)

牛客网测试地址:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd [编程题]二叉搜索树的后序遍...
  • zjkC050818
  • zjkC050818
  • 2017年04月27日 10:04
  • 285

判断二叉搜索树的后序遍历序列是否合法

简单的分析一下,后序遍历,遍历顺序为左右根,那么序列的最后一个节点必为根节点。由于二叉搜索树的性质,根节点的左子树所有值小于根节点的值,右子树大于根节点,那么,我们只需要将序列分为左子树(leftTr...
  • dingchenxixi
  • dingchenxixi
  • 2016年09月25日 11:11
  • 631

二叉搜索树的后序遍历序列Java

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true, 否则返回false。假设输入的数组的任意两个数字都互不相同。 思路:在后序遍历得到的序列中,最后一个数字是...
  • u013238950
  • u013238950
  • 2016年03月08日 16:10
  • 1143

剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 例如输入数组{5,7,6,9,11,10,8...
  • jsqfengbao
  • jsqfengbao
  • 2015年08月04日 20:26
  • 1534

【剑指Offer】二叉搜索树的后序遍历序列

问题描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。背景知识:二叉搜索树(Binary Search T...
  • zgljl2012
  • zgljl2012
  • 2015年09月19日 01:57
  • 1772

二叉搜索树的后序遍历序列(递归与非递归)

题目:输入一个整数数组,判断该整数是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都不相同。 解析:例如输入的数组{5,7,6,9,...
  • yang20141109
  • yang20141109
  • 2016年03月25日 17:38
  • 333
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 816
    排名: 6万+
    文章存档
    最新评论