(机考)二叉树后序遍历

Posted kirosola

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(机考)二叉树后序遍历相关的知识,希望对你有一定的参考价值。

二叉树后序遍历

描述:

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

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

        

因此返回true。

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

输入说明:

包含多组数据,第一行是数据组数T,接下来有2T行,

每组数据有2行:

第一行为整数n,表示序列元素的个数,n小于100。

第二行为n个元素。

输出说明:

判断这个序列是不是某个二叉树的后序遍历序列,是输出“YES”,不是输出“NO”。

输入样例:

2

7

4  8  6  12  16  14  10

4

7  4  6  5

输出样例:

YES

NO

 

#include<stdio.h>
bool verifySequenceOfBST(int* sequence, int length)
{
	int i;
	int root = sequence[length - 1];
	for (i = 0; i < length - 1; i++)
	{
		if (sequence[i] > root)
			break;
	}
	int j = i;
	for (j; j < length - 1; j++)
	{
		if (sequence[j] < root)
			return false;
	}
	bool left = true;
	if (i > 1)
		left = verifySequenceOfBST(sequence, i);
	bool right = true;
	if (length - i - 1 > 1)
		right = verifySequenceOfBST(sequence + i, length - i - 1);
	return (left && right);
}
int main()
{
	int A[100];
	int t, n;
	scanf("%d", &t);
	for (int i = 0; i < t; i++)
	{
		scanf("%d", &n);
		for (int j = 0; j < n; j++)
			scanf("%d", &A[j]);
		if (verifySequenceOfBST(A, n))
			printf("TES
");
		else
			printf("NO
");
	}
}

  

以上是关于(机考)二叉树后序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树后序遍历

二叉树遍历非递归算法——后序遍历

二叉树后序遍历和层次遍历

二叉树的后续遍历是啥意思啊?

二叉树后序遍历 (先序和中序求后序)

二叉树后序非递归遍历