数据结构||二叉树的创建,遍历(递归)

1.TestMain.c

#include"Common.h"
#include"BinTree.h"
int main()
{
 BinTree bt;
 BinTreeInit(&bt);
 /*BinTreeCreate_1(&bt);*/
 /*bt = BinTreeCreate_2();*/
 BinTreeCreate(&bt);
 printf("VLR:");
 PreOrder(&bt);
 printf("\n");
 //
 printf("LVR:");
 InOrder(&bt);
 printf("\n");
 //
 printf("LRV:");
 PostOrder(&bt);
 printf("\n");
 return 0;
}

2.Common.h

#ifndef _COMMON_
#define _COMMON_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
#include<Windows.h>
#define OK  1
#define NO  0
#define DataType char
#endif

3.BinTree.h

#ifndef _BINTREE_
#define _BINTREE_
#include"Common.h"
typedef struct BinTreeNode
{
 DataType data;
 struct BinTreeNode *LeftChild;
 struct BinTreeNode *RightChild;
}BinTreeNode;
//typedef BinTreeNode* BinTree;
typedef struct BinTree
{
 struct BinTreeNode *root;//创建根节点
}BinTree;
//二叉树的创建
void BinTreeInit(BinTree *t);
void _BinTreeCreate_1(BinTreeNode **t);
void BinTreeCreate(BinTree *t);
BinTreeNode* _BinTreeCreate_2();
//二叉树的遍历
void _PreOrder(BinTreeNode *t);
void PreOrder(BinTree *t);
void _InOrder(BinTreeNode *t);
void InOrder(BinTree *t);
void _PostOrder(BinTreeNode *t);
void PostOrder(BinTree *t);
void BinTreeInit(BinTree *t)
{
 t->root = NULL;
}
void BinTreeCreate(BinTree *t)
{
 //_BinTreeCreate_1(&(t->root));
 t->root = _BinTreeCreate_2();
}
void _BinTreeCreate_1(BinTreeNode **t)
{
 DataType item;
  scanf_s("%c", &item);
  if (item == '#')//为 #说明根节点的下一个节点为空
  {
   *t = NULL;
  }
  else
  {
   *t = (BinTreeNode*)malloc(sizeof(BinTreeNode));//不为空 则申请一个节点作为它的子节点
   assert(t != NULL);
   t->data = item;
   t->LeftChild = _BinTreeCreate_2();//递归创建下一个节点 左树
   t->RightChild = _BinTreeCreate_2();//递归创建下一个节点 右树
   return t;
  }
}
void PreOrder(BinTree *t)//前序遍历
{
 _PreOrder(t->root);
}
void _PreOrder(BinTreeNode *t)
{
 if (t != NULL)
 {
  printf("%c ", t->data);
  _PreOrder(t->LeftChild);//递归访问左树
  _PreOrder(t->RightChild);//递归访问右树
 }
}
void InOrder(BinTree *t)
{
 _InOrder(t->root);
}
void _InOrder(BinTreeNode *t)//中序遍历
{
 if (t != NULL)
 {
  _InOrder(t->LeftChild);//递归访问左树
  printf("%c ", t->data);//访问根
  _InOrder(t->RightChild);//递归访问右树
 }
}
void PostOrder(BinTree *t)
{
 _PostOrder(t->root);
}
void _PostOrder(BinTreeNode *t)//后序遍历
{
 if (t != NULL)
 {
  _PostOrder(t->LeftChild);//递归访问左树
  _PostOrder(t->RightChild);//递归访问右树
  printf("%c ", t->data);//访问根
 }
}
#endif
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值