Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
已知二叉树的一个按先序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点)。请建立二叉树并按中序和后序的方式遍历该二叉树。
Input
连续输入多组数据,每组数据输入一个长度小于50个字符的字符串。
Output
每组输入数据对应输出2行:
第1行输出中序遍历序列;
第2行输出后序遍历序列。
Sample Input
abc,de,g,f,
Sample Output
cbegdfa
cgefdba
这个题就是基础的建立二叉树,遍历二叉树的方式。
二叉树里要时刻记住递归的思想。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char a[111];
int l1;
struct tree
{
char data;
tree *lboy, *rgirl;
};
struct tree *creat()
{
tree *root; //建立二叉树
char c;
c = a[l1++];
if(c == ',') return NULL;
else
{
root = new tree;
root->data = c;
root->lboy = creat();
root->rgirl = creat();
}
return root;
}
void preprintf(tree *root) //先序遍历,这一题没用到。 先序就是根左右。
{
if(root)
{
printf("%c",root->data);
preprintf(root->lboy);
preprintf(root->rgirl);
}
}
void midprintf(tree *root) //中序遍历,左根右。
{
if(root)
{
midprintf(root->lboy);
printf("%c",root->data);
midprintf(root->rgirl);
}
}
void backprintf(tree *root) //后序遍历,根左右。
{
if(root)
{
backprintf(root->lboy);
backprintf(root->rgirl);
printf("%c",root->data);
}
}
int main()
{
tree *root;
while(~scanf("%s",a))
{
l1 = 0;
root = creat();
midprintf(root);
printf("\n");
backprintf(root);
printf("\n");
}
return 0;
}
遍历时:
先序遍历:左右根;
中序遍历:根左右;
后序遍历:左右根;
递归时就按顺序敲就行:
void preprintf(tree *root)
{
if(root)
{
printf("%c",root->data); //根
preprintf(root->lboy); //左
preprintf(root->rgirl); //右
}
}
void midprintf(tree *root)
{
if(root)
{
midprintf(root->lboy); 左
printf("%c",root->data); 根
midprintf(root->rgirl); 右
}
}
void backprintf(tree *root)
{
if(root)
{
backprintf(root->lboy); 左
backprintf(root->rgirl); 右
printf("%c",root->data); 根
}
}
建立时用到了指针函数,还有个叫函数指针的东西。
指针函数我自己还没搞明白,说下函数指针吧。
函数指针就是用指针调用函数。
我写了个简单的例子:
#include<stdio.h>
int max(int a, int b)
{
if(a>b) return a;
else return b;
}
int main()
{
int x = 11, y = 22;
int (*mm)(int,int);
mm = max;
int c = (*mm)(x,y);
printf("%d",c);
return 0;
}
这个输出的结果就是22;这里指针指向的是max函数,我理解就是通
过指针调用这个函数,函数是不变的,指针能改变,如果还有个min
函数的话,我如果再让mm = min;这时候指针调用的又是min函数了。
所以,我目前为止也不知道为什么不直接调用,还得用个指针调用,等
我问问老师再更新一波。
又见面了鸭,我已经请教过老师了,4个字:效率高!!!!!!!
向前冲鸭!!!!!!!!