码迷,mamicode.com
首页 > 其他好文 > 详细

(机考)二叉树后序遍历

时间:2019-11-23 09:59:28      阅读:50      评论:0      收藏:0      [点我收藏+]

标签:csharp   div   nbsp   class   har   ++   return   包含   个数   

二叉树后序遍历

描述:

输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历结果。如果是返回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\n");
		else
			printf("NO\n");
	}
}

  

(机考)二叉树后序遍历

标签:csharp   div   nbsp   class   har   ++   return   包含   个数   

原文地址:https://www.cnblogs.com/KIROsola/p/11915263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!