如何将下面的二叉树的程序运行结果前序遍历顺序输出到文件D:\\BiTree.txt。
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#defineMAXSIZE100typedefcharData...
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100
typedef char DataType;
typedef struct BiTNode /* 二叉链表存储结构 */
{ DataType data;
struct BiTNode *lchild,*rchild;
}BiTree;
typedef BiTree* ElemType ; /* 栈中数据元素类型,栈中保存结点指针 */
typedef struct
{ ElemType data[MAXSIZE];
int top;
}SeqStack; /* 栈的类型定义,顺序栈 */
typedef struct
{ElemType queue[MAXSIZE];
int front,rear;
}SP;
SeqStack *initSeqStack() /* 初始化栈 */
{ SeqStack *s; /* 首先建立栈空间,然后初始化栈顶指针 */
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top=-1;
return s;}
int push(SeqStack *s,ElemType x)
{ if(s->top==MAXSIZE-1){ /* 栈满不能入栈 */
printf("栈满");
return 0;
}
s->top++;
s->data[s->top]=x;
return 1;}
void pop(SeqStack *s) /* 出栈,假设栈不空 */
{ s->top--; }
int empty(SeqStack *s)
{ if(s->top==-1) return 1;
else return 0;
}
ElemType top(SeqStack *s) /* 设栈不空 */
{ return (s->data[s->top]);
}
/* 递归算法创建二叉链表 */
BiTree *createBiTree()
{ DataType ch;
BiTree *T;
ch=getchar();
if(ch=='0') return NULL;
else { T=(BiTree *)malloc(sizeof(BiTree));
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
return T; }
}
/* 前序遍历二叉树的递归算法 */
void PreOrder(BiTree *T)
{ if(T)
{ printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void main()
{ }
求各位高手告诉怎么做,代码怎么写(由于字数的限制本来函数里还包括其他各种遍历只写了二叉树的前序遍历) 展开
#include <stdlib.h>
#include <malloc.h>
#define MAXSIZE 100
typedef char DataType;
typedef struct BiTNode /* 二叉链表存储结构 */
{ DataType data;
struct BiTNode *lchild,*rchild;
}BiTree;
typedef BiTree* ElemType ; /* 栈中数据元素类型,栈中保存结点指针 */
typedef struct
{ ElemType data[MAXSIZE];
int top;
}SeqStack; /* 栈的类型定义,顺序栈 */
typedef struct
{ElemType queue[MAXSIZE];
int front,rear;
}SP;
SeqStack *initSeqStack() /* 初始化栈 */
{ SeqStack *s; /* 首先建立栈空间,然后初始化栈顶指针 */
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top=-1;
return s;}
int push(SeqStack *s,ElemType x)
{ if(s->top==MAXSIZE-1){ /* 栈满不能入栈 */
printf("栈满");
return 0;
}
s->top++;
s->data[s->top]=x;
return 1;}
void pop(SeqStack *s) /* 出栈,假设栈不空 */
{ s->top--; }
int empty(SeqStack *s)
{ if(s->top==-1) return 1;
else return 0;
}
ElemType top(SeqStack *s) /* 设栈不空 */
{ return (s->data[s->top]);
}
/* 递归算法创建二叉链表 */
BiTree *createBiTree()
{ DataType ch;
BiTree *T;
ch=getchar();
if(ch=='0') return NULL;
else { T=(BiTree *)malloc(sizeof(BiTree));
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
return T; }
}
/* 前序遍历二叉树的递归算法 */
void PreOrder(BiTree *T)
{ if(T)
{ printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void main()
{ }
求各位高手告诉怎么做,代码怎么写(由于字数的限制本来函数里还包括其他各种遍历只写了二叉树的前序遍历) 展开
展开全部
//按顺序打印二叉树结果到文件中
void OutputInPreOrder(BiTree *T, FILE* fp)
{
//同遍历,使用递归
if(T)
{
//输出节点数值
fprintf(fp, "%d ", T->data);
OutputInPreOrder(T->lchild, fp);
OutputInPreOrder(T->rchild, fp);
}
}
void main()
{
//打开文件
FILE* fp = fopen("D:\\BiTree.txt","w");
//输入二叉树内容
BiTree* root = createBiTree();
//按顺序打印二叉树结果到文件中
OutputInPreOrder(root, fp);
//关闭文件流
fclose(fp);
}
靠,我提交全部代码会提交失败~就把原来的main函数改成这两段,
另外,为了操作方便,
typedef int DataType;这个原来是char我改成了int,不过写文件的道理是一样的。
更多追问追答
追问
请问如何将下面函数返回的值(return后面的值)保存到上述同样的文件里,
int BiTreeDepth(BiTree *T,FILE* fp)
{ int i,j;
if(!T) return 0;
i=BiTreeDepth(T->lchild ,fp);
j=BiTreeDepth(T->rchild ,fp);
return i>j?i+1:j+1;
}
追答
看来,问题与二叉树无关,你是对文件操作不熟悉!!
就是要把BiTreeDepth每次的返回值给输入到文件里:
int BiTreeDepth(BiTree *T,FILE* fp)
{
int i,j;
if(!T)
return 0;
i=BiTreeDepth(T->lchild ,fp);
j=BiTreeDepth(T->rchild ,fp);
if(i > j)
{
fprintf(fp, "%d", (i+1));
return (i+1);
}
fprintf(fp, "%d", (j+1));
return (j+1);
}
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询