【算法简述】基础数据结构-二叉树


树是一种非线性数据结构,在图中使用分支关系组成的结构,它的子树通常按照左右分为左子树和右子树,父子节点和儿子节点都是其中的元素,如下图:

当然,后面我会写满二叉树,这也是一个满二叉树,我后面会写。

二叉树类型

空二叉树

在这里插入图片描述
这是一个特殊的二叉树,一个节点都没有,是个空的,很特殊吧。

有根但无子树

在这里插入图片描述
看,这个也是特殊的二叉树只有根节点,没有子节点。

根左/右子树

在这里插入图片描述
这个树有一个根节点一个子节点,很好看吧

根左右子树

在这里插入图片描述
也可以叫满二叉树。

二叉树遍历

二叉树遍历就是指沿着二叉树某条路径,然后将路径上的点做一次一次的访问。

其次,由二叉树访问节点的遍历,有以下的结构

前序遍历(先序遍历)

访问根节点的操作发生在遍历其左右子树之前。

  1. 访问根结点。
  2. 前序遍历左子树。
  3. 前序遍历右子树 。
for(int i=1;i<=n;i++){
			if(tot[i][0]==x){
			cout<<x;
				f(tot[i][1]);
				f(tot[i][2]);
			}
		}

中序遍历

访问根节点的操作发生在遍历其左右子树之中。

  1. 访问根结点。
  2. 中序遍历左子树。
  3. 中序遍历右子树 。
for(int i=1;i<=n;i++){
			if(tot[i][0]==x){
				f(tot[i][1]);
				cout<<x;
				f(tot[i][2]);
			}
		}

后序遍历

访问根节点的操作发生在遍历其左右子树之后。

  1. 访问根结点。
  2. 中序遍历左子树。
  3. 中序遍历右子树 。
for(int i=1;i<=n;i++){
			if(tot[i][0]==x){
				f(tot[i][1]);
				f(tot[i][2]);
				cout<<X;
			}
		}

二叉树-列题

P1305 新二叉树

这道题,十分怪,让你输出二叉树,所以,二叉树吗,就直接找就行了。——没什么用。
因为是前序排列的二叉树,所以只需遍历左右二叉树就可以了。按照前给的模板。

#include<bits/stdc++.h>
using namespace std;
int n;
char tot[1000][1000];
void f(char x){
	if(x!='*'){
		cout<<x;
		for(int i=1;i<=n;i++){
			if(tot[i][0]==x){
				f(tot[i][1]);
				f(tot[i][2]);
			}
		}
	}
	return ;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>tot[i][0]>>tot[i][1]>>tot[i][2];
	}
		f(tot[1][0]);
	return 0;
}

附加题:

P5018 对称二叉树

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值