如果需要代码解释请在评论区留言
树的前序遍历
#include<iostream>
using namespace std;
int n;
char t[30];
void preOrder(int root) {
int lChild = root*2;
int rChild = root*2+1;
cout<<t[root];
if(lChild<=n) preOrder(lChild);
if(rChild<=n) preOrder(rChild);
}
int main()
{
scanf("%d",&n);
char x;
for(int i=1;i<=n;i++) {
cin>>t[i];
}
preOrder(1);
return 0;
}
树的中序遍历
#include<iostream>
using namespace std;
int n;
char t[30];
void preOrder(int root) {
int lChild = root*2;
int rChild = root*2+1;
if(lChild<=n) preOrder(lChild);
cout<<t[root];
if(rChild<=n) preOrder(rChild);
}
int main()
{
scanf("%d",&n);
char x;
for(int i=1;i<=n;i++) {
cin>>t[i];
}
preOrder(1);
return 0;
}
树的后序遍历
#include<iostream>
using namespace std;
int n;
char t[30];
void preOrder(int root) {
int lChild = root*2;
int rChild = root*2+1;
if(lChild<=n) preOrder(lChild);
if(rChild<=n) preOrder(rChild);
cout<<t[root];
}
int main()
{
scanf("%d",&n);
char x;
for(int i=1;i<=n;i++) {
cin>>t[i];
}
preOrder(1);
return 0;
}
任意树的前序遍历,需要找根
#include<iostream>
using namespace std;
struct node {
int lChild,rChild;
}e[105];
int n;
void preOrder(int root) {
cout<<root<<" ";
if(e[root].lChild!=-1) preOrder(e[root].lChild);
if(e[root].rChild!=-1) preOrder(e[root].rChild);
}
int main()
{
scanf("%d",&n);
int x,l,r;
for(int i=1;i<=n;i++) {
scanf("%d%d%d",&x,&l,&r);
e[x].lChild = l;
e[x].rChild = r;
}
int root=1;
bool flag = true;
while(flag) {
flag = false;
for(int i=1;i<=n;i++) {
if((e[i].lChild==root)||(e[i].rChild==root)) {
root = i;
flag = true;
break;
}
}
}
preOrder(root);
return 0;
}
任意树的中序遍历,需要找根
#include<iostream>
using namespace std;
struct node {
int lChild,rChild;
}e[105];
int n;
void preOrder(int root) {
if(e[root].lChild!=-1) preOrder(e[root].lChild);
cout<<root<<" ";
if(e[root].rChild!=-1) preOrder(e[root].rChild);
}
int main()
{
scanf("%d",&n);
int x,l,r;
for(int i=1;i<=n;i++) {
scanf("%d%d%d",&x,&l,&r);
e[x].lChild = l;
e[x].rChild = r;
}
int root=1;
bool flag = true;
while(flag) {
flag = false;
for(int i=1;i<=n;i++) {
if((e[i].lChild==root)||(e[i].rChild==root)) {
root = i;
flag = true;
break;
}
}
}
preOrder(root);
return 0;
}
任意树的后序遍历
#include<iostream>
using namespace std;
struct node {
int lChild,rChild;
}e[105];
int n;
void preOrder(int root) {
if(e[root].lChild!=-1) preOrder(e[root].lChild);
if(e[root].rChild!=-1) preOrder(e[root].rChild);
cout<<root<<" ";
}
int main()
{
scanf("%d",&n);
int x,l,r;
for(int i=1;i<=n;i++) {
scanf("%d%d%d",&x,&l,&r);
e[x].lChild = l;
e[x].rChild = r;
}
int root=1;
bool flag = true;
while(flag) {
flag = false;
for(int i=1;i<=n;i++) {
if((e[i].lChild==root)||(e[i].rChild==root)) {
root = i;
flag = true;
break;
}
}
}
preOrder(root);
return 0;
}
求树的高度
#include<iostream>
#include<cmath>
using namespace std;
int n;
char t[1005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) {
cin>>t[i];
}
cout<<floor(log2(n)+1);
return 0;
}
FBI树请看此处