(机考)二叉树后序遍历
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 "); } }
以上是关于(机考)二叉树后序遍历的主要内容,如果未能解决你的问题,请参考以下文章