第1个回答 2010-12-17
先序遍历
void preorder(Tree T)
{
if (T == NULL)
return;
else
{
printf("%c",T->Element);
preorder(T->Left);
preorder(T->Right);
}
}
后序遍历
void Postorder(Tree T)
{
if (T == NULL)
return;
else
{
preorder(T->Left);
preorder(T->Right);
printf("%c",T->Element);
}
}
第2个回答 2010-12-16
//可以啊。如输入ABC###D## 输出CBAD
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;// 左、右孩子指针
}BiTNode, *BiTree;
int CreateBiTree(BiTree &T){
// 按中序输入二叉树中结点的值(一个字符),#字符表示空树
// 构造二叉链表表示的二叉树T。
char ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else {
if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
CreateBiTree(T->lchild);
T->data=ch;// 生成根结点
CreateBiTree(T->rchild);
}
return 0;
}
void InTraverse(BiTree &T)
//中序遍历
{
if(T){ //非空二叉树
InTraverse(T->lchild); //递归遍历左子树
printf("%c",T->data); //访问D
InTraverse(T->rchild); //递归遍历右子树
}
}
int main(){
BiTree T;
CreateBiTree(T);
InTraverse(T);
return 0;
}
第3个回答 2010-12-18
下面是二叉树的遍历题,看得部是很不明白,求解题思路,越详细越好!!!我的分不多,拜托各位!!!
32.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( )
A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG
33.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( A )。
A.CBEFDA B. FEDCBA C. CBEDFA D.不定
34.已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( D )。
A.acbed B.decab C.deabc D.cedba
35. 某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E 则前序序列是:B
A.E,G,F,A,C,D,B B.E,A,C,B,D,G,F
C.E,A,G,C,F,B,D D.上面的都不对