二叉树:
二叉树的遍历实现
声明文件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