作者:Linux猿
简介:CSDN博客专家,华为云享专家,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……
欢迎小伙伴们点赞、收藏⭐、留言
目录
一、题目描述
1.1 输入描述
1.2 输出描述
1.3 测试样例
1.3.1 示例 1
二、解题思路
三、代码实现
四、时间复杂度
给定一个以顺序存储结构(按每一层从左到右顺序)存储整数值的完全二叉树序列(最多 1000 个整数),请找出此完全二叉树的所有非叶子节点部分,然后采用后序遍历的方式将该树的非叶子节点输出。
只有一个节点的树,此节点是根节点,应该被认为是非叶子节点。
此完全二叉树并非满二叉树,可能存在倒数第二层出现叶子节点,或者无右叶子的情况。
后序遍历的顺序:左-右-根。
一个通过空格分隔的整数序列字符串。
非叶子部分树结构的后序遍历结果。
输入
1 2 3 4 5 6 7
输出
2 3 1
说明:找到非叶子部分树结构,然后采用后序遍历输出。
备注:输出数字以空格分隔。
本题主要考查后序遍历,首先需要对输入的字符串进行解析,因为题目要求仅仅输出非叶子节点的后序遍历结果,所以只需要对非叶子节点进行后序遍历即可。
假设有完全二叉树有 n 个节点,那么,非叶子节点个数为 m = n / 2。
代码实现如下所示。
#include
#include
#include
#include
using namespace std;
vectorg;
// 后续遍历
void postOrder(int x, int n, bool &flag) {
if (x * 2 + 1 < n) {
postOrder(x * 2 + 1, n, flag);
}
if (x * 2 + 2 < n) {
postOrder(x * 2 + 2, n, flag);
}
if (flag) cout<<" ";
cout<
时间复杂度:O(n)
其中,n 表示完全二叉树节点个数,在上述代码中,首先通过 while 解析出 n 个节点,然后通过后序遍历输出非叶子节点,所以时间复杂度为 O(n)。
感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言,感谢大家的一路支持!猿哥将持续输出「优质文章」回馈大家!