二叉树的建立与相关运算
以广义表的形式输入二叉树,建立二叉链表,完成如下功能:
三种递归遍历
计算并输出单分支节点,双分支结点,叶子结点及其个数。
把任一种递归算法改为非递归算法。

数据结构 二叉树的建立与相关运算
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 山楂奶酪黄连蒜 2015-12-17 09:40关注
#include
#include#define N 20
typedef struct tree
{
char data;
struct tree *pa;
struct tree *lc;
struct tree *rc;
}sTre,*pTre;void output(pTre p);
void create_tree(pTre root,char arr[N]);
int pre_create_tree(pTre p,char arr[N],int i);
void init_node(pTre *p);
void create_memory(pTre *p);
void pre(pTre p);
void mid(pTre p);
void last(pTre p);
void free_memory(pTre *p);
void delete_node(pTre p);
void unload(pTre p);int main()
{
pTre root=NULL;
init_node(&root);
char arr[N];
printf("please input pre tree:\n");
gets(arr);
create_tree(root,arr);
output(root);
unload(root);
return 0;
}void create_tree(pTre root,char arr[N])
{
if(arr[0]=='\0')
{
printf("input error!\n");
return;
}
root->data=arr[0];
pre_create_tree(root,arr,1);
}int pre_create_tree(pTre p,char arr[N],int i)
{
pTre pnew=NULL;
if(arr[i]=='\0')
{
return i;
}
if(arr[i]!=' ')
{
init_node(&pnew);
pnew->data=arr[i];
p->lc=pnew;
pnew->pa=p;
i=pre_create_tree(pnew,arr,i+1);
if(arr[i]=='\0')
{
return i;
}
}
i++;
if(arr[i]=='\0')
{
return i;
}
if(arr[i]!=' ')
{
init_node(&pnew);
pnew->data=arr[i];
p->rc=pnew;
pnew->pa=p;
i=pre_create_tree(pnew,arr,i+1);
}
return i;
}void init_node(pTre *p)
{
create_memory(p);
(*p)->pa=NULL;
(*p)->lc=NULL;
(*p)->rc=NULL;
}void create_memory(pTre *p)
{
*p=malloc(sizeof(sTre));
if(NULL==*p)
{
printf("create memory error!\n");
exit(-1);
}
}void pre(pTre p)
{
if(p!=NULL)
{
printf("%c ",p->data);
pre(p->lc);
pre(p->rc);
}
}
void mid(pTre p)
{
if(p!=NULL)
{
mid(p->lc);
printf("%c ",p->data);
mid(p->rc);
}
}
void last(pTre p)
{
if(p!=NULL)
{
last(p->lc);
last(p->rc);
printf("%c ",p->data);
}
}void unload(pTre p)
{
if(p!=NULL)
{
unload(p->lc);
unload(p->rc);
delete_node(p);
}
}void delete_node(pTre p)
{
p->pa=NULL;
free_memory(&p);
}void free_memory(pTre *p)
{
if(*p!=NULL)
{
free(*p);
*p=NULL;
}
}void output(pTre p)
{
printf("pre:");
pre(p);
printf("\nmid:");
mid(p);
printf("\nlast:");
last(p);
printf("\n");
}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥40 找同学帮敲Python代码
- ¥15 MYSQL 订单的商品明细重复计算问题
- ¥15 微信实时共享位置修改
- ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
- ¥50 共模反馈回路的小信号增益
- ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
- ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
- ¥40 Ida Pro增加插件出现问题
- ¥15 诊断性META分析合并效能的检验
- ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储