数据结构作业之输出二叉树的所有从根节点到叶节点的路径

数据结构作业,输出二叉树的所有从根节点到叶节点的路径

#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
 char data;
 struct tree *lchild,*rchild;
}tree,*Tree;
int inittree(Tree T)
{
 T=(Tree)malloc(sizeof(tree));
 T->lchild=T->rchild=NULL;
 return 1;
}
void createtree(Tree &T)
{
 char ch;
 scanf("%c",&ch);
 if(ch=='#')
 T=NULL;
 else
 {
  T=(Tree)malloc(sizeof(tree));
  T->data=ch;
  T->lchild=T->rchild=NULL;
  createtree(T->lchild);
  createtree(T->rchild);
 }
}
typedef struct snode
{
 Tree *data;
 int top;
}Snode; 
int initstack(Snode *S)
{
 S->data=(Tree *)malloc(sizeof(Tree)*100);
 S->top=0;
 return 1;
}
int enstack(Snode *S,Tree e)
{
 S->data[S->top]=e;
 S->top++;
 return 1;
}
Tree destack(Snode *S)
{
 Tree e;
 e=S->data[S->top-1];
 S->top--;
 return e;
}
/*输出栈内元素*/ 
void print(Snode S)
{
 int i=0;
 while(i<S.top)
 {
  printf("%c",S.data[i]->data);
  i++;
 }
}
Snode S;
/*二叉树递归输出所有路径*/
void disptree(Tree T)
{
 enstack(&S,T);
 if(T->lchild==NULL&&T->rchild==NULL)
 {
  print(S);
  printf("\n");
 }
 else
 {
  if(T->lchild) disptree(T->lchild);
  if(T->rchild) disptree(T->rchild);
 }
 destack(&S);
}
/*二叉树根据深度输出所有路径*/ 
char data[20];
void Disptree(Tree T,int deep)
{
 data[deep]=T->data;
 if(T->lchild==NULL&&T->rchild==NULL)
 {
  data[deep+1]='\0';
  printf("%s\n",data);
 }
 if(T->lchild) Disptree(T->lchild,deep+1);
 if(T->rchild) Disptree(T->rchild,deep+1);
} 
int main()
{
 Tree T;
 createtree(T);initstack(&S);
 disptree(T);
 printf("\n");
 Disptree(T,0);
 return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值