• 判断数组是不是某二叉搜索树的后序遍历


    题目:输入一个数组,判断数组是不是某二叉搜索树的后序遍历。输入的数组的任意两个数字都不相同

    分析:要明白题目的意思,意思就是判断一个数组是否是某个搜索树的后序遍历。首先要搞清搜索树的含义:跟结点大于左子树而小于右子树。其次,数组的最后一个结点一定是后序遍历的根节点。所以我们只要满足这两个条件,再通过递归就可以解出来了。代码如下:

    // 二叉搜索树的遍历序列.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    bool isPostBST(int sequence[], int length)   //注意这里传入的sequence就是指向序列的第一个结点
    {
        //1.容错性
        if (sequence==NULL||length<=0)
            return false;
    
        //2.先要找到序列的分界点,此时因为对左子树进行了遍历所以也相当于对左子树进行了判断
        int i;  //分界点
        for (i = 0; i < length - 1; i++)
        {
            if (sequence[i]>sequence[length - 1])
                break;
        }
       //3.对序列的右子树进行判断
        for (int j = i; j < length-1; j++)
        {
            if (sequence[j] < sequence[length - 1])
                return false;
        }
      //4.当左右子树都满足的时候就要进行递归
        if (i >= 1)//左边至少有两个点的时候
            return isPostBST(sequence, i);
    
        if (i <= length - 3)//右子树至少有两个点的时候
            return isPostBST(sequence + i, length -i-1);//i是左子树的数目,1是根节点的数目
    
        return true;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //int s[] = {7,4,6,5};
        //int s[] = { 7, 8, 6, 5 };
        int s[] = { 5,7,6,9,11,10,8 };
        if (isPostBST(s,7))
            cout<< "输入的数组为某个二叉搜索树的后序遍历!" << endl;
        else
            cout<< "输入的数组不是任何二叉搜索树的后序遍历!" << endl;
        return 0;
    }

    结果:微笑

    输入数组:5,7,6,9,11,10,8

    image

    输入数组:7,4,6,5

    image

    输入数组:7,8,6,5

    image

  • 相关阅读:
    switch 语句注意事项
    line-height 和 font-size的关系
    HTTP 缓存
    hashchange事件的认识
    面向对象的写法,见到就添,持续更新。。。
    chrome浏览器开发者工具之同步修改至本地
    history对象的一些知识点
    你不知道的函数节流,提高你的JS性能!
    玩媒体查询,就是这么简单粗暴!
    css中clip-path属性的运用
  • 原文地址:https://www.cnblogs.com/menghuizuotian/p/3790068.html
Copyright © 2020-2023  润新知