在一些基础的算法题目中,树相关的题目出现的频率非常高,无论是面试基础题、PAT考试、考研机试、还是期末考试,都有很大机会遇见到,这类题目总体上不难,并且具有一定的技巧性,掌握一些基础的题型,这类问题也就迎刃而解了!
下面来直接看例题,从题目中总结。
1. 判断二叉搜索树
题目概述:
给定一个序列,问这个序列是否能构成某个二叉搜索树或者其镜像的前序遍历,输出为是否能构成,如果能构成输出后序遍历。
思路分析
我们就只要假设这个给定的序列是可以构成某个二叉搜索树或者其镜像的前序遍历,那么中序遍历的结果排个序就可以得到了,这个是中序遍历的性质,如果是镜像的话,那么这个中序遍历就是逆序的。现在我们知道中序、前序的序列,那么思考下是否可以构建一颗树了呢?
其实这就是一个小结论,如果知道一颗树的中序遍历,再加上前序或者后序遍历的任意一个,就可以构建一颗完整的树。
接下来,思考下如何去构建一颗树?
这张图就把整个的构建过程完整的体现出来了!
接下来就来看看代码如何去写
这道题目到此就分析完全了。
下面是这道题目的完整代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1010;
int inorder[N], preorder[N];
int postorder[N], cnt