二叉树遍历,求叶结点,重构

数据结构实验题,二叉树的先序,后序,中序,层次遍历,插入结点,求叶子结点个数,求非叶子结点个数,求总结点数,求树的深度,已知先序和中序重构二叉树。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ctrl_i=0;
typedef struct BTNode{
    char data;    //结点的信息用一个字符保存
	BTNode*lchild,  *rchild; //左右孩子的指针
}BTNode;

#define MAX_SIZE 128
#define STR_SIZE 1024

typedef struct Node {    // 定义二叉链
    char         data;   // 数据元素
    struct Node* lchild; // 指向左孩子节点
    struct Node* rchild; // 指向右孩子节点
} LinkNode;                // struct Node 的别名

typedef struct Quene {      // 定义顺序队
    int     front;          // 队头指针
    int     rear;           // 队尾指针
    BTNode* data[MAX_SIZE]; // 存放队中元素
} SqQueue;                  // struct Queue 的别名

//生成唯一的根节点。根节点的信息用一个字符参数输入。
BTNode *CreateRoot(char c)
{
    //申请根结点空间
    BTNode * tmp = (BTNode *)malloc(sizeof(BTNode));
    //判断申请空间是否成功,若成功,则输入结点信息,并初始化指针
    if (!tmp) 
		printf("申请空间失败,无法创建根结点\n");
    else
    {//申请空间成功,为根节点赋初值
		tmp->data = c;
		tmp->lchild = NULL;
		tmp->rchild = NULL;
    }
	//返回根节点
    return  tmp ;
}


//在指定结点下插入一个左孩子,原先的左子树作为新插入左孩子结点的左子树,并返回新插入左孩子结点的指针。
BTNode *InsertLeftNode(BTNode *curNode,  char c)
{
    //申请左孩子结点的空间
    BTNode * tmp = (BTNode *)malloc(sizeof(BTNode) );
    //判断申请空间是否成功,若成功,则输入结点信息,并初始化指针
    if (tmp==NULL) 
		printf("申请空间失败,无法创建根结点\n");
    else
    {
		//curNode原先的左子树挂到新结点下面
		tmp->lchild = curNode->lchild;
		//新结点右子树置空
		tmp->rchild = NULL;
        //输入新结点信息
		tmp->data = c;
        //新结点作为左孩子挂在curNode下面
		curNode->lchild=tmp;
    }
    return  tmp  ;
}

//删除左子结点
//若指定结点的左子结点仅有一颗子树,则删除该左子结点,同时将其子树作为指定结点的左子树。
void DelLeftNode(BTNode *curNode)
{
    //如果curNode的左子结点有两颗子树,则不删除,直接返回。
    if ( curNode->lchild->lchild  && curNode->lchild->rchild  )   return;
    //暂存左子结点指针
    BTNode * tmp =  curNode->lchild  ;
    //保存该左子结点的非空子树
    BTNode *lc = tmp->lchild?tmp->lchild: tmp->rchild ;
    //该非空子树挂到curNode的左路
	curNode->lchild = lc;
	
    //删除左子结点
    free(tmp);
}

//在指定结点下插入一个右孩子,原先的右子树作为新插入右孩子结点的右子树,并返回新插入右孩子结点的指针。
BTNode *InsertRightNode(BTNode *curNode,  char c)
{
	//申请右孩子结点的空间
    BTNode * tmp = (BTNode *)malloc(sizeof(BTNode) );
    //判断申请空间是否成功,若成功,则输入结点信息,并初始化指针
    if (tmp==NULL) 
		printf("申请空间失败&#x
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值