c/c++语言开发共享天梯废物我是

给定一棵完美二叉树的后序遍历,求完美二叉树的层次遍历。只需要求出该树的左右儿子的数量即可#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;

给定一棵完美二叉树的后序遍历,求完美二叉树的层次遍历。
只需要求出该树的左右儿子的数量即可

#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

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐