1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)

2024-11-07 18:02:37
推荐回答(2个)
回答1:

tree.h

#include
#include
#define MAX_NODE 50
typedef struct BiTNode
{
char data;
BiTNode *lchild,*rchild;

}BiTNode,*BiTree;
BiTree CreateBiTree();
void InorderTraverse( BiTree T);

creatTree.cpp
#include"tree.h"

BiTree CreateBiTree()
{

BiTree T;
char ch;
scanf("%c",&ch);
if (ch=='#')
{
T=NULL;
return T;

}

else
{
T=(BiTNode *)malloc(sizeof(BiTNode));

if (T==NULL)
{
printf("树创建失败!");
T=NULL;

return T;
}

T->data=ch;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
return T;
}
}

InorderTraverse.cpp
#include"tree.h"
void InorderTraverse( BiTree T)
{
BiTree stack[MAX_NODE] ,p=T ;
int top=0 , bool1=1 ;
if (T==NULL)
printf("Binary Tree is Empty!\n");
else
{
do
{
while (p!=NULL)
{
stack[++top]=p ;
p=p->lchild ;
}

if (top==0)
{
bool1=0 ;
}else{
p=stack[top] ;
top-- ;
printf("%c",p->data);
p=p->rchild ;
}
} while (bool1!=0) ;
}
}

main_fun.cpp
#include"tree.h"
int main()
{

BiTree T= CreateBiTree();
InorderTraverse(T);
return 0;

}
traverse.cpp
#include"tree.h"
void PreorderTraverse(BiTree T)
{
if (T!=NULL)
{
/* 访问根结点 */
PreorderTraverse(T->lchild) ;
printf("%c",T->data);
PreorderTraverse(T->rchild) ;
}
}

例如 输入 AB###
输出BA
先序输入 中序输出
可以修改遍历方式 来改变输出结果。

回答2:

你这个问题不对吧?任意输入二叉树的结点个数和结点值,可能能构造很多种二叉树