DS--二叉树的创建和七种遍历方式,包括三种递归的前中后序遍历和三种非递归的前中后序遍历以及层次遍历

二叉树

二叉树的遍历实现

声明文件Bintree.h

#ifndef _BINTREE_H_
#define _BINTREE_H_

#include<stdio.h>
#include<string.h>
#include<Windows.h>
#define ENDTAG '#'

typedef char BTDataType;

typedef struct BinaryTreeNode
{
	BTDataType _data;//当前节点的值域
	struct BinaryTreeNode* _left;//指向当前节点的左孩子
	struct BinaryTreeNode* _right;//指向当前节点的右孩子
}BTNode;

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* a);
void BinaryTreeDestory(BTNode* root);

// 递归遍历//深度优先遍历
void BinaryTreePrevOrder(BTNode* root);
void BinaryTreeInOrder(BTNode* root);
void BinaryTreePostOrder(BTNode* root);

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root);//广度优先遍历

// 判断二叉树是否是完全二叉树
int BinaryTreeComplete(BTNode* root);

//非递归先中后序遍历
void _BinaryTreePrevOrderNonR(BTNode* root);
void _BinaryTreeInOrderNonR(BTNode* root);
void _BinaryTreePostOrderNonR(BTNode* root);



#endif

实现文件Bintree.c

#include"bintree.h"
#include"queue.h"
#include"stack.h"



// 构造一棵树
BTNode* BinaryTreeCreate(BTDataType* a)//构造一棵树
{
	static int i = 0;
	if (a[i] == ENDTAG)
	{
		i++;
		return NULL;
	}
	else
	{
		BTNode* cur = (BTNode*)malloc(sizeof(BTNode));
		cur->_data = a[i];
		i++;
		cur->_left = BinaryTreeCreate(a);
		cur->_right = BinaryTreeCreate(a);
		return cur;
	}
}
//递归型:前中后序遍历************************************************************************************************************************


void BinaryTreePrevOrder(BTNode* root)//二叉树的先序遍历
{ 
	if (root != NULL)
	{
		printf("%c", root->_data);
		BinaryTreePrevOrder(root->_left);
		BinaryTreePrevOrder(root->_right);
	}
}
void BinaryTreeInOrder(BTNode* root)//二叉树的中序遍历
{
	if (root != NULL)
	{
		BinaryTreeInOrder(root->_left);
		printf("%c", root->_data);
		BinaryTreeInOrder(root->_right);
	}
}
void BinaryTreePostOrder(BTNode* root)//二叉树的后序遍历
{
	if (root != NULL)
	{
		BinaryTreePostOrder(root->_left);
		BinaryTreePostOrder(root->_right);
		printf("%c", root->_data);
	}
}

//层次遍历************************************************************************************************************************

void BinaryTreeLevelOrder(BTNode* root)//层序遍历&#x
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值