二叉树(1)
二叉树遍历
中序遍历,后序遍历
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <cmath>
using namespace std;
#define sfd(i) scanf("%d", &i)
#define sfl(i) scanf("%I64d", &i)
#define sfs(i) scanf("%s", (i))
#define prd(i) printf("%d\n", i)
#define prl(i) printf("%I64d\n", i)
#define sff(i) scanf("%lf", &i)
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define mst(x, y) memset(x, y, sizeof(x))
#define INF 0x3f3f3f3f
#define inf 8e19
#define eps 1e-10
#define PI acos(-1.0)
#define lowbit(x) ((x) & (-x))
#define fl() printf("flag\n")
#define MOD(x) ((x % mod) + mod) % mod
#define endl '\n'
#define pb push_back
#define lson (rt << 1)
#define rson (rt << 1 | 1)
#define FAST_IO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
char a[100];
int len;
struct node {
int data;
node *l, *r;
};
node *create() {
node *root;
char c;
c = a[len++];
if (c == ',')
return NULL;
else {
root = new node;
root->data = c;
root->l = create();
root->r = create();
}
return root;
}
void mid(node *root) {
if (root) {
mid(root->l);
printf("%c",root->data);
mid(root->r);
}
}
void after(node *root) {
if (root) {
after(root->l);
after(root->r);
printf("%c", root->data);
}
}
int main() {
node *root;
while (~scanf("%s", a)) {
len = 0;
root = new node;
root = create();
mid(root);
cout << endl;
after(root);
cout << endl;
}
return 0;
}
层序遍历
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <cmath>
using namespace std;
#define sfd(i) scanf("%d", &i)
#define sfl(i) scanf("%I64d", &i)
#define sfs(i) scanf("%s", (i))
#define prd(i) printf("%d\n", i)
#define prl(i) printf("%I64d\n", i)
#define sff(i) scanf("%lf", &i)
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define mst(x, y) memset(x, y, sizeof(x))
#define INF 0x3f3f3f3f
#define inf 8e19
#define eps 1e-10
#define PI acos(-1.0)
#define lowbit(x) ((x) & (-x))
#define fl() printf("flag\n")
#define MOD(x) ((x % mod) + mod) % mod
#define endl '\n'
#define pb push_back
#define lson (rt << 1)
#define rson (rt << 1 | 1)
#define FAST_IO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
int len;
char a[110];
struct node
{
char data;
node *l, *r;
};
int i;
node *create()
{
node *root;
char c = a[i ++];
if(c == ',') root = NULL;
else
{
root = new node;
root->data = a[i - 1];
root->l = create();
root->r = create();
}
return root;
}
void f(struct node *root) {
node *p[1010];
int n = 0, m = 0;
p[m ++] = root;
while(n < m)
{
if(p[n] != NULL){
printf("%c", p[n]->data);
p[m ++] = p[n] -> l;
p[m ++] = p[n] -> r;
}
n ++;
}
}
int main()
{
int n;
cin >> n;
node *root;
while(n --)
{
i = 0;
root = new node;
cin >> a;
len = strlen(a);
root = create();
f(root);
cout << endl;
}
return 0;
}
已知前序中序,求后序
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <cmath>
using namespace std;
#define sfd(i) scanf("%d", &i)
#define sfl(i) scanf("%I64d", &i)
#define sfs(i) scanf("%s", (i))
#define prd(i) printf("%d\n", i)
#define prl(i) printf("%I64d\n", i)
#define sff(i) scanf("%lf", &i)
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define mst(x, y) memset(x, y, sizeof(x))
#define INF 0x3f3f3f3f
#define inf 8e19
#define eps 1e-10
#define PI acos(-1.0)
#define lowbit(x) ((x) & (-x))
#define fl() printf("flag\n")
#define MOD(x) ((x % mod) + mod) % mod
#define endl '\n'
#define pb push_back
#define lson (rt << 1)
#define rson (rt << 1 | 1)
#define FAST_IO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0)
char a[110];
char b[110];
struct node
{
int data;
node *l, *r;
};
node *create(int len, char *a, char *b)
{
node *root;
if(!len) return NULL;
root = new node;
root -> data = a[0];
int i;
for(i = 0; i < len; i ++)
{
if(b[i] == a[0]) break;
}
root->l = create(i, a + 1, b);
root->r = create(len - i - 1, a + i + 1, b + i + 1);
return root;
}
void after(node *root)
{
if(root)
{
after(root->l);
after(root->r);
printf("%c", root->data);
}
}
int main()
{
node *root;
cin >> a >> b;
int len = strlen(a);
root = new node;
root = create(len, a, b);
after(root); cout << endl;
return 0;
}