有根数的建立 遍历 以及递归求深度

#include<iostream>
using namespace std;
#define MAX 100005
#define NIL -1

struct node{
	int p,r,l; 
};

node T[MAX];
int n,D[MAX];

void print (int u){
	int i,c;
	cout << "node"  <<u<<" : ";
	cout << "parent" << T[u].p<<",";
	cout<< "depeth"<<D[u] <<",";
	
	if(T[u].p==NIL){
		cout << "root, "; 
	}else if(T[u].l==NIL){
		cout <<"leaf, "; 
	}else
	cout << "中间节点, ";
	
	cout<<" [ ";
	
	for(i=0,c=T[u].l;c!=NIL;i++,c=T[c].r){
		if(i){
			cout<<" ,"; 
		} 
		cout << c; 
	}
	cout <<" ]"<<endl; 
} 
//递归求深度(只需要遍历一次) 
void rec(int r ,int p){
	D[r]=p;
	if(T[r].r!=NIL){
		rec(T[r].r,p); 
	} 
	if(T[r].l!=NIL){
		rec(T[r].l,p+1); 
	} 
} 

int main(){
	int i,j,d,v,c,l,r;
	cin >> n;
	for (i = 0;i< n;i++ ){
		T[i].p=T[i].l=T[i].r=NIL; 
	} 
	for(i = 0 ;i<n;i++){
		cin >>v>>d;
		for(j=0;j<d;j++){
			cin>>c; 
			if(j==0){
				T[v].l=c; 
			}else{
				T[l].r=c; 
			} 
			l=c;
			T[c].p=v; 
		} 
	} 
	
	
	
	for(i=0;i<n;i++){
		if(T[i].p==NIL){
		 	r=i;
			 break; 
		} 
	} 
	
	rec(r,0);
	
	for(i=0;i<n ;i++){
		print(i);	
	} 


	return 0;
} 

这里用了左子右兄弟的结构体

左子 : 代表该节点的是否有 左儿子

右兄弟 : 判断该节点时候相邻的右兄弟

具体的话 代码通俗易懂 (这仅仅是数的入门而已)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值