二叉树的创建和遍历(附代码已测试)

#include <stdio.h>
#include <stdlib.h>
#define MAX_TREE_SIZE 100

typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild; // 左右孩子指针
}btree, *BiTree;

void main()
{
    // 先序次序输入构造二叉树
    btree *CreateBiTree1(btree *T);
    // 二叉树的先序遍历
    void TreeFirst(btree *T);
    // 二叉树的中序遍历
    void TreeMiddle(btree *T);
    // 二叉树的后序遍历
    void TreeLast(btree *T);

    // 定义
	btree T;
	btree *root; // 用于创建二叉树后返回指向二叉树根节点的指针,以便于遍历。否则创建完二叉树会丢失 
    root = CreateBiTree1(&T);
	printf("Middle:\n");
    TreeFirst(root);
	printf("\nLeft:\n");
	TreeMiddle(root);
	printf("\nRight:\n");
	TreeLast(root);
	printf("\n");
}

// 先序构造次序输入二叉树
btree *CreateBiTree1(btree *T)
{
    char temp;

    // 输入数据
    scanf("%c",&temp);
    if(temp == '#')
        T = NULL;
    else
    {
        // 动态开辟内存空间
        T = (btree *)malloc(sizeof(btree));
        // 若申请分配空间失败则退出
        if(!T)
            exit(0);
        T->data = temp;
        T->lchild = CreateBiTree1(T->lchild);
        T->rchild = CreateBiTree1(T->rchild);
    }
	return T;
}
// 二叉树的先序遍历
void TreeFirst(btree *T)
{	
    if(T)
    {
        printf("%c  ",T->data);
        TreeFirst(T->lchild);
        TreeFirst(T->rchild);
    }
}
// 二叉树的中序遍历
void TreeMiddle(btree *T)
{
	if (T)
	{
		TreeMiddle(T->lchild);
		printf("%c  ",T->data);
		TreeFirst(T->rchild);
	}
}
// 二叉树的后序遍历
void TreeLast(btree *T)
{
	if (T)
	{
		TreeFirst(T->lchild);
		TreeFirst(T->rchild);
		printf("%c  ",T->data);
	}
}

总结:
1、构建二叉树时用到递归调用要注意递归的入口点和出口点是什么
2、创建二叉树时要用返回根节点指针的函数,主函数用一个二叉树的指针来接收根节点的指针,否则创建后不能返回主函数会丢失。
3、递归时一定要注意也要用T->lchild = 子函数,T->rchild = 子函数。进行接收创建的左右子树的指针,函数的格式要与子函数一致有返回值
4、树的子函数是递归函数时一定要用返回指针的函数。否则会导致子树建立不全,丢失树叶,也不能进行递归。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值