1.31日学习总结

今天学习了二叉树

#include<iostream>
#include<cstring>
using namespace std;
//s1 中序 s2 后序
void print(string s1,string s2)
{
	if(s1=="\0"||s2=="\0")
		return;
    int pos=s1.find(s2[s2.size()-1]);
	cout<<s1[pos];
	print(s1.substr(0,pos),s2.substr(0,pos));
	print(s1.substr(pos+1),s2.substr(pos,s2.size()-pos-1));
}
int main()
{
	string s1,s2;
    cin>>s1>>s2;
	print(s1,s2);
	return 0;
}

 

 

#include<iostream>
#include<cstring>
using namespace std;
//s1 先序 s2 中序
void print(string s1,string s2)
{
	if(s1=="\0"||s2=="\0")
		return;
	int pos=s2.find(s1[0]);
	print(s1.substr(1,pos),s2.substr(0,pos));
	print(s1.substr(pos+1),s2.substr(pos+1));
	cout<<s1[0];
	
}
int main()
{
	string s1,s2;
    cin>>s2>>s1;
	print(s1,s2);
	return 0;
}

 这两道题都是同一类型的,都是已知先序或后序以及中序,求后序或先序。为了更方便的解决这两道题学习了find函数和substr函数。之后就可以根据先序中序后序的原理,利用递归推出未知的序列。

这道题目可以利用数组l,r储存二叉树的每个节点的左右孩子,再利用dfs不断更新最大深度。 

#include<iostream>
using namespace  std;
#define N 1000010
int l[N],r[N],n,ans;
void dfs(int x,int deep)
{
	ans=max(ans,deep);
	if(l[x]!=0)
	{
	dfs(l[x],deep+1);		
	}
    if(r[x]!=0)
	{
	dfs(r[x],deep+1);		
	}
	return;
}
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++)
	{
		cin >> l[i] >> r[i];
	}
	dfs(1,1);
	cout <<ans<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值