zoukankan      html  css  js  c++  java
  • 八:二叉搜索树的后序遍历

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

    满足性质:

    (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》学习笔记

  • 相关阅读:
    9.19 数组 冒泡排序和二分法
    9,18 考试
    html5学习拓展
    第七天,
    第六天 js 开始
    第五天 列表 流
    第四天 样式,框架
    硬件攻城狮设计需要考量的11个关键因素
    步进电机的驱动方式
    MOS管防反接电路设计
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5337074.html
Copyright © 2011-2022 走看看