提示二叉树 题目描述众所周知, 求大神,二支树题目,帮忙用C语言写个程序!

提示二叉树
题目描述众所周知, 求大神,二支树题目,帮忙用C语言写个程序!提示二叉树
题目描述众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次。最常使用的有三种遍历的方式:
1.前序遍历:若二叉树为空,则空操作;否则先访问根结点,接着前序遍历左子树,最后再前序遍历右子树。
2.中序遍历:若二叉树为空,则空操作;否则先中序遍历左子树,接着访问根结点,最后再前中遍历右子树。
3.后序遍历:若二叉树为空,则空操作;否则先后序遍历左子树,接着后序遍历右子树,最后再访问根结点。
现在的问题是给定前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。输入输入有多组数据,每组数据两行,第一行给出前序遍历的访问顺序,第二行给出后序遍历的访问顺序。二叉树的结点用一个大写字母表示,不会有两个结点标上相同字母。输入数据不包含空格,且保证至少有一棵二叉树符合要求。输出输出一个整数,为符合要求的不同形态二叉树的数目。
样例输入
ABCD
CBDA
样例输出2

二叉树是采用递归定义的,实现起来代码简洁(也许并不简单)。并且它在具体的计算机科学中有很重要的运用,是一种很重要的数据结构,二叉树有三种遍历和建立的方式。今天先学习一下它的建立和打印。
以下代码在Win-Tc1.9.1下编译通过。

include lt;stdio.h;
define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉树
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf(;%c;,ch);
if(ch==;;)T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T-;data = ch;
T-;lchild = CreateBiTree();
T-;rchild = CreateBiTree();
}
return T;//返回根节点
}
//先序遍历二叉树
void PreOrderTraverse(BiTree T){
if(T){
printf(;%c;,T-;data);
PreOrderTraverse(T-;lchild);
PreOrderTraverse(T-;rchild);
}
}

//中序遍历
void InOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T-;lchild);
printf(;%c;,T-;data);
PreOrderTraverse(T-;rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T-;lchild);
PreOrderTraverse(T-;rchild);
printf(;%c;,T-;data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getch();
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答