首页 > 代码库 > 判断数组是不是某二叉搜索树的后序遍历
判断数组是不是某二叉搜索树的后序遍历
题目:输入一个数组,判断数组是不是某二叉搜索树的后序遍历。输入的数组的任意两个数字都不相同
分析:要明白题目的意思,意思就是判断一个数组是否是某个搜索树的后序遍历。首先要搞清搜索树的含义:跟结点大于左子树而小于右子树。其次,数组的最后一个结点一定是后序遍历的根节点。所以我们只要满足这两个条件,再通过递归就可以解出来了。代码如下:
// 二叉搜索树的遍历序列.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
输入数组:7,4,6,5
输入数组:7,8,6,5
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。