二叉树的递归版实现

这个博客详细介绍了二叉树的各种递归操作,包括初始化、前序、中序和后序遍历,创建、克隆、销毁树节点,以及计算叶子节点数量、高度等操作。此外,还提供了测试函数来验证这些操作的正确性。
摘要由CSDN通过智能技术生成

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) { 
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值