tree.h
#pragma once
#include<stdlib.h>
#include<stddef.h>
#include<string.h>
#define TEST_HEAND printf("========%s=========\n",__FUNCTION__);
typedef char TreeNodeType;
typedef char SeqQueType;
typedef struct SeqQueue
{
SeqQueType root;
struct SeqQueue* q;
}SeqQueue;
typedef struct TreeNode
{
TreeNodeType data;
struct TreeNode* lchild;
struct TreeNode* rchild;
}TreeNode;
void TreeInit(TreeNode** pRoot);
void TreePreOrder(TreeNode* root);
void TreeInOrder(TreeNode* root);
void TreePostOrder(TreeNode* root);
TreeNode* CreatTreeNode(TreeNodeType value);
TreeNode* TreeClone(TreeNode* root);
TreeNode* TreeCreat(TreeNodeType data[], size_t size, char null_node);
void TreeDestroy(TreeNode* root);
size_t TreeleafSize(TreeNode* root);
size_t TreeKleafSize(TreeNode* root, int k);
size_t TreeHeight(TreeNode* root);
TreeNode* TreeFind(TreeNode* root, TreeNodeType to_find);
TreeNode* parent(TreeNode* root, TreeNode* child);
TreeNode* Lchild(TreeNode* tree, TreeNode* node);
TreeNode* Rchild(TreeNode* tree, TreeNode* node);
void TreeMirror(TreeNode* root);
tree.c
#include<stdio.h>
#include"bin_tree.h"
#include<stdlib.h>
void TreeInit(TreeNode** pRoot){
if (pRoot == NULL){
return;
}
*pRoot = NULL;
}
TreeNode* CreatTreeNode(TreeNodeType value){
TreeNode* new_node = (TreeNode*)malloc(sizeof(TreeNode));
new_node->data = value;
new_node->lchild = NULL;
new_node->rchild = NULL;
return new_node;
}
TreeNode* DestroyTreeNode(TreeNode* root){
free(root);
return NULL;
}
void TreePreOrder(TreeNode *root){
{
if (root == NULL)
return;
}
printf("%c ", root->data);
TreePreOrder(root->lchild);
TreePreOrder(root->rchild);
return;
}
void TreeInOrder(TreeNode* root){
{
if (root == NULL)
return;
}
TreeInOrder(root->lchild);
printf("%c ", root->data);
TreeInOrder(root->rchild);
return;
}
void TreePostOrder(TreeNode* root){
{
if (root == NULL)
return;
}
TreePostOrder(root->lchild);
TreePostOrder(root->rchild);
printf("%c ", root->data);
return;
}
//void LevelOrder(TreeNode* root)
//{
// if (root == NULL)
// {
// return;
// }
// SeqQueue q;
// SeqQueueInit(&q);
// SeqQueuePush(&q, root);
// while (1) {
// SeqQueType fron;
// int ret = SeqQueueTop(&q, &fron);
// if (ret == 0)
// {
// break;
// } //打印当前值
// printf("%c ",fron->data); //出队列当前队首元素
// SeqQueuePop(&q); //分别入队列左右子树
// if(fron->lchild!=NULL) {
//