二叉树
树是一种非线性数据结构,在图中使用分支关系组成的结构,它的子树通常按照左右分为左子树和右子树,父子节点和儿子节点都是其中的元素,如下图:
当然,后面我会写满二叉树,这也是一个满二叉树,我后面会写。
二叉树类型
空二叉树
这是一个特殊的二叉树,一个节点都没有,是个空的,很特殊吧。
有根但无子树
看,这个也是特殊的二叉树只有根节点,没有子节点。
根左/右子树
这个树有一个根节点一个子节点,很好看吧 !
根左右子树
也可以叫满二叉树。
二叉树遍历
二叉树遍历就是指沿着二叉树某条路径,然后将路径上的点做一次一次的访问。
其次,由二叉树访问节点的遍历,有以下的结构
前序遍历(先序遍历)
访问根节点的操作发生在遍历其左右子树之前。
- 访问根结点。
- 前序遍历左子树。
- 前序遍历右子树 。
for(int i=1;i<=n;i++){
if(tot[i][0]==x){
cout<<x;
f(tot[i][1]);
f(tot[i][2]);
}
}
中序遍历
访问根节点的操作发生在遍历其左右子树之中。
- 访问根结点。
- 中序遍历左子树。
- 中序遍历右子树 。
for(int i=1;i<=n;i++){
if(tot[i][0]==x){
f(tot[i][1]);
cout<<x;
f(tot[i][2]);
}
}
后序遍历
访问根节点的操作发生在遍历其左右子树之后。
- 访问根结点。
- 中序遍历左子树。
- 中序遍历右子树 。
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;
}
附加题: