开始记录关于实现二叉树的代码及疑问
目前尝试成功的部分代码:
// SJJG_SY4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "malloc.h"
//定义返回值
#define OK 1
#define TURE 1
#define ERROR 0
#define FALSE 0
//定义树的数据类型
#define NodeType char
typedef struct TreeNode
{
NodeType data; //结点的数值域
TreeNode *Lchild; //结点的左孩子
TreeNode *Rchild; //结点的右孩子
}TreeNode,*treenode;
//不带参的create函数
treenode CreateTree() //正序创建树,无传入参数,返回值为一个结点
{
treenode t;
t=(treenode)malloc(sizeof(TreeNode)); //动态分配空间
char s;
s=getchar(); //读取一个字符
if (s=='0') t=NULL; //如果为0,则当前结点为空(递归)
else
{
t->data=s; //将s的值赋给当前结点
t->Lchild=CreateTree(); //创建t的左孩子,进入递归
t->Rchild=CreateTree(); //创建t的右孩子,进入递归
}
return t; //返回新结点t
}
//正序输出函数
int InOrder(treenode node)
{
treenode t=node; //将参数node的值赋给t
if (t==NULL) return OK; //如果t为NULL,则已完全遍历一棵树的枝干,返回OK(递归)
else
{
printf("%c ",t->data); //输出该结点的值
InOrder(t->Lchild); //进入t结点的左孩子,开始递归
InOrder(t->Rchild); //进入t结点的右孩子,开始递归
}
return OK; //整棵树输出完毕,返回OK
}
int main(int argc, char* argv[])
{
treenode node; //创建一个treenode类型的指针node
node=CreateTree(); //正序创建以node为根结点的树
InOrder(node); //正序输出以node为跟结点的树
return OK;
}
此前写了一个带参数的CreateTree函数,但是实际运行中却没有达到应有的效果,在次贴上代码:
//带参的Create函数
int CreateTree(treenode node)
{
treenode t;
t=(treenode)malloc(sizeof(TreeNode));
char s;
s=getchar();
if (s=='0') {t=NULL; return OK;}
else
t->data=s;
CreateTree(t->Lchild);
CreateTree(t->Rchild);
node=t;
putchar(node->data);
return OK;
}
//正序输出函数
int InOrder(treenode node)
{
treenode t=node;
if (t==NULL) return OK;
else
{
printf("%c ",t->data);
InOrder(t->Lchild);
InOrder(t->Rchild);
}
return OK;
}