二叉树

定义:

二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。

二叉树的第i层至多有2^(i-1)个结点;

深度为k的二叉树至多有2^k-1个结点;

对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1

深度=层数-1

 

定义树的结构:

typedef struct BtNode
{
	BtNode* leftchild;
	BtNode* rightchild;
	ElemType data;
}BtNode,*BinaryTree;

先序遍历:

void preOrder(BtNode* p)
{
	if(p!=NULL)
	{
		cout<<p->data<<" ";
		preOrder(p->leftchild);
		preOrder(p->rightchild);
	}
}

//非递归的先序遍历
void nicePreOrder(BtNode* ptr)
{
	if(ptr==NULL)
		return;

	stack<BtNode*> st;
	st.push(ptr);
	while(!st.empty())
	{
		ptr=st.top();
		st.pop();
		cout<<ptr->data<<" ";
		if(ptr->rightchild!=NULL)
		{
			st.push(ptr->rightchild);
		}
		if(ptr->leftchild!=NULL)
		{
			st.push(ptr->leftchild);
		}
	}
	cout<<endl;
}

中序遍历:

void inOrder(BtNode* p)
{
	if(p!=NULL)
	{
		inOrder(p->leftchild);
		cout<<p->data<<" ";
		inOrder(p->rightchild);
	}
}

//非递归的中序遍历
void niceInOrder(BtNode* ptr)
{
	if(ptr==NULL)
		return;

	stack<BtNode*> st;
	while(ptr!=NULL || !st.empty())
	{
		while(ptr!=NULL)
		{
			st.push(ptr);
			ptr=ptr->leftchild;
		}
		ptr=st.top();
		st.pop();
		cout<<ptr->data<<" ";
		ptr=ptr->rightchild;
	}
	cout<<endl;
}

后序遍历:

void pastOrder(BtNode* p)
{
	if(p!=NULL)
	{
		pastOrder(p->leftchild);
		pastOrder(p->rightchild);
		cout<<p->data<<" ";
	}
}

//非递归的中序遍历
void nicePastOrder(BtNode* ptr)
{
	if(ptr==NULL)
		return;
	
	BtNode * tag=NULL;
	stack<BtNode*> st;
	while(ptr!=NULL || !st.empty())
	{
		while(ptr!=NULL)
		{
			st.push(ptr);
			ptr=ptr->leftchild;
		}
		ptr=st.top();
		st.pop();
		if(ptr->rightchild==NULL || ptr->rightchild==tag)
		{
			cout<<ptr->data<<" ";
			tag=ptr;
			ptr=NULL;
		}
		else
		{
			st.push(ptr);
			ptr=ptr->rightchild;
		}
	}
	cout<<endl;
}

层次遍历:(用到队列,先把根结点入队,每出一个结点就将它的左右孩子入队

//层次打印
void levelOrder(BtNode* p)
{
	if(p==NULL) return;
	queue<BtNode*> qu;
	qu.push(p);
	while(!qu.empty())
	{
		p=qu.front();
		cout<<p->data<<" ";
		if(p->leftchild!=NULL)
			qu.push(p->leftchild);
		if(p->rightchild!=NULL)
			qu.push(p->rightchild);
	}
	cout<<endl;
}

查找:(先找左子树,如果没找到,再去找右边

BtNode* findValue(BtNode* ptr,ElemType x)
{
	if(ptr==NULL || ptr->data==x)
		return ptr;
	else
	{
		BtNode* p=findValue(ptr->leftchild,x);
		if(p==NULL)
		{
			p=findValue(ptr->rightchild,x);
		}
		return p;
	}
}

求结点数:(左右子树结点数加一

int size(BtNode* ptr)
{
	if (ptr==NULL)
		return 0;
	else
		return size(ptr->leftchild)+size(ptr->rightchild)+1;
}

求深度:(左右子树深度较大值加一

int depth(BtNode* ptr)
{
	if(ptr==NULL)
		return 0;
	else
		return Max(depth(ptr->leftchild),depth(ptr->rightchild))+1;
}

判断一棵树是否为满二叉树(每一层结点数目都达到最大值

bool Is_Full_BinaryTree1(BtNode* ptr)
{
	if(ptr==NULL) return true;
	int dep=depth(ptr);
	int s=size(ptr);
	if(s==(int)pow(2,dep)-1)
		return true;
	else
		return false;
}

 完全二叉树(除了最后一层,其他层结点数都达到最大数目) 

思路:层次遍历,出现一个空结点,则后面的结点都必须是空结点,这棵树才为完全二叉树

删除整棵树:

思路:后序遍历一次,然后删掉当前结点

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值