数据结构——二叉树的实现

开始记录关于实现二叉树的代码及疑问

目前尝试成功的部分代码:

// 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值