给定一棵完美二叉树的后序遍历,求完美二叉树的层次遍历。
只需要求出该树的左右儿子的数量即可
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n; struct node{ int lnum; int rnum; int sz; int val; }tr[N]; int a[N]; vector<int>dep[N]; void build(int u) { tr[u].sz=1; if((u*2)<=n) build(u<<1); if((u*2+1)<=n) build(u<<1|1); tr[u].lnum=tr[u<<1].sz; tr[u].rnum=tr[u<<1|1].sz; tr[u].sz=tr[u].lnum+tr[u].rnum+1; } void dfs(int u,int d,int l,int r) { cout<<l<<" "<<r<<" "<<tr[u].lnum<<endl; if(l==r) { dep[d].push_back(a[l]); return ; } dep[d].push_back(a[r]); if(l<=l+tr[u].lnum-1) dfs(u*2,d+1,l,l+tr[u].lnum-1); if(l+tr[u].lnum<=r-1) dfs(u*2+1,d+1,l+tr[u].lnum,r-1); } int main() { ios::sync_with_stdio(); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; build(1); dfs(1,1,1,n); // return 0; for(int i=1;;i++) { if(!dep[i].size()) return 0; for(int j=0;j<dep[i].size();j++) { int x=dep[i][j]; if(j==dep[i].size()-1 && !dep[i+1].size()) cout<<x<<endl; else cout<<x<<" "; } } return 0; }
c/c++开发分享天梯废物我是地址:https://blog.csdn.net/qq_45961321/article/details/110290478
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/596547.html