[程序员面试题精选100题]6.二叉查找树的后序遍历结果

简介:

【题目】

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

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

          8
        /    \
      6    10
     /   \   /   \
   5    7 9 11

因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

【分析】

这是一道trilogy的笔试题,主要考查对二叉查找树的理解。

在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分;

从第一个大于跟结点开始到跟结点前面的一个元素为止,所有元素都应该大于跟结点,因为这部分元素对应的是树的右子树。

根据这样的划分,把序列划分为左右两部分,我们递归地确认序列的左、右两部分是不是都是二叉查找树。

【代码】

/*********************************
*   日期:2013-12-20
*   作者:SJF0115
*   题目: 6.二叉查找树的后序遍历结果
*   来源:trilogy
*   分类:程序员面试题精选100题
**********************************/
#include <iostream>
using namespace std;

// 判断是否是二叉查找树的后序遍历结果
// array 整数数组
// n 数组元素个数
bool IsPostOrder(int array[],int n){
    if(array == NULL || n <= 0){
        return false;
    }
    int index = 0;
    // 前半部分(左子树)小于最后一个元素(根节点)
    for(int i = 0;i < n-1;i++){
        if(array[i] > array[n-1]){
            index = i;
            break;
        }//if
    }//for
    // 后半部分(右子树)大于最后一个元素(根节点)
    for(int i = index;i < n-1;i++){
        if(array[i] < array[n-1]){
            return false;
        }//if
    }//for
    // 判断左子树是否满足
    bool left = true;
    if(index > 0){
        left = IsPostOrder(array,index);
    }
    // 判断右子树是否满足
    bool right = true;
    if(index < n-1){
        right = IsPostOrder(array+index,n-index-1);
    }
    return left&&right;
}

int main(){
    int a[] = {5,7,6,9,11,10,8};
    cout<<IsPostOrder(a,7)<<endl;
    int b[] = {7,4,6,5};
    cout<<IsPostOrder(b,4)<<endl;
    int c[] = {7};
    cout<<IsPostOrder(c,1)<<endl;
    return 0;
}


目录
相关文章
|
7月前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
92 10
|
8月前
|
JavaScript 前端开发 小程序
CoderGuide 程序员前后端面试题库,打造全网最高质量题库
CoderGuide涵盖范围包括且不限于:前端面试题(Vue,React,JS,HTTP,HTML,CSS面试题等),后端面试题(Java,Python,Golang,PHP,Linux,Mysql面试题等),以及算法面试题,大厂面试题,高频面试题,校招面试题等,你想要的,这里都有!
140 2
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】 GBDT面试题:其中基分类器CART回归树,节点的分裂标准是什么?与RF的区别?与XGB的区别?
文章讨论了梯度提升决策树(GBDT)中的基分类器CART回归树的节点分裂标准,并比较了GBDT与随机森林(RF)和XGBoost(XGB)的区别,包括集成学习方式、偏差-方差权衡、样本使用、并行性、最终结果融合、数据敏感性以及泛化能力等方面的不同。
135 1
|
10月前
|
前端开发 应用服务中间件 程序员
老程序员分享:Nginx相关面试题
老程序员分享:Nginx相关面试题
112 2
|
11月前
|
前端开发 JavaScript 程序员
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
2024年最新65% 的程序员竟都是自学成才?_为啥学技术都自学,2024年最新42岁程序员面试
|
10月前
|
SQL JavaScript Java
java程序员面试题大全含答案(2018--2019)
java程序员面试题大全含答案(2018--2019)
|
10月前
|
前端开发 程序员 JavaScript
9年程序员总结个人的面试技巧
9年程序员总结个人的面试技巧
64 2
|
11月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
11月前
|
算法 程序员
2024年有哪些话一听就知道一个程序员是个水货?(1),2024年最新面试真题及答案
2024年有哪些话一听就知道一个程序员是个水货?(1),2024年最新面试真题及答案
2024年有哪些话一听就知道一个程序员是个水货?(1),2024年最新面试真题及答案
|
11月前
|
前端开发 程序员 开发工具
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略

热门文章

最新文章

下一篇
oss创建bucket