【天梯赛练习】L2-035 完全二叉树的层序遍历

  • 后序遍历转层序遍历
  • 后序遍历:左------右------根
  • 层序遍历:数组形式存储的完全二叉树的顺序遍历序列其实就正好是其层序遍历序列。
    • 子树根若是 i d id id,左子树 i d ∗ 2 id*2 id∗2,右子树 2 ∗ i d + 1 2*id+1 2∗id+1

所以就是dfs递归找左右子树

注意后序遍历特点,最后才输出根。所以dfs中找完左右子树才记录根。

cpp 复制代码
#include <bits/stdc++.h>
#define forr(i,l,r) for(int i=l;i<=r;i++)
#define reforr(i,l,r) for(int i=r;i>=l;i--)
#define int long long
#define pii pair<int,int>
#define endl '\n'
#define PI 3.14159265
using namespace std;
const int N=35;
int pst[N];
int d,n;
int res[N],cnt=0;
void dfs(int id){
    if(id>n)return;
    dfs(id<<1);//左子树
    dfs(id<<1|1);//右子树
    res[id]=pst[++cnt];//先到的是最左边的子树
    // cout<<id<<' '<<cnt<<' '<<res[id]<<endl;
}
void solve(){
    cin>>n;
    forr(i,1,n){
        cin>>pst[i];
    }
    dfs(1);
    forr(i,1,n){
        cout<<res[i]<<(i==n?'\n':' ');
    }
}
相关推荐
轻抚酸~2 小时前
KNN(K近邻算法)-python实现
python·算法·近邻算法
Yue丶越4 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
小白程序员成长日记5 小时前
2025.11.24 力扣每日一题
算法·leetcode·职场和发展
有一个好名字5 小时前
LeetCode跳跃游戏:思路与题解全解析
算法·leetcode·游戏
AndrewHZ6 小时前
【图像处理基石】如何在图像中提取出基本形状,比如圆形,椭圆,方形等等?
图像处理·python·算法·计算机视觉·cv·形状提取
蓝牙先生6 小时前
简易TCP C/S通信
c语言·tcp/ip·算法
稚辉君.MCA_P8_Java9 小时前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法
稚辉君.MCA_P8_Java10 小时前
通义 插入排序(Insertion Sort)
数据结构·后端·算法·架构·排序算法
无限进步_10 小时前
C语言动态内存的二维抽象:用malloc实现灵活的多维数组
c语言·开发语言·数据结构·git·算法·github·visual studio
Swift社区11 小时前
LeetCode 432 - 全 O(1) 的数据结构
数据结构·算法·leetcode