关闭

八:二叉搜索树的后序遍历

标签: 二叉搜索树的后序遍历判断该数组是不是某二叉查找树的后序遍历的二叉排序树的后序遍历二叉查找树的后序遍历
416人阅读 评论(0) 收藏 举报
分类:

二叉搜索树:(又称:二叉查找树,二叉排序树)

满足性质:

(1) 它或者是一棵空树;

(2) 或者是具有下列性质的二叉树:

  <1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

  <2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;

  <3> 左、右子树也分别为二查找序树;

 

问题描述:

输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。


解析:

根据后序遍历的定义,如果一个序列是二叉树的后续遍历的结果,那么我们不难得出,序列的最后一个节点必定是二叉树的根节点,除了根节点外,序列中前一部分是二叉树的左子树的节点,后面一部分是二叉树的右子树的节点。同理,左右子树的遍历结果也具有一样的特点。


代码如下:

bool VerifySquenceOfBST(int sequence[], int length)

{

    if(sequence== NULL || length <= 0)

        returnfalse;

 

    int root =sequence[length - 1];

 

    // 在二叉搜索树中左子树的结点小于根结点

    int i = 0;

    for(; i <length - 1; ++ i)

    {

       if(sequence[i] > root)

           break;

    }

 

    // 在二叉搜索树中右子树的结点大于根结点

    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);

}




注:《剑指offer》学习笔记

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12368次
    • 积分:387
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档