#include <stdio.h>
#include <stdlib.h>
#define QUEUE_MAX_LEN 50
typedef char DATA;
typedef struct ChainTree {
DATA data;
struct ChainTree* left;
struct ChainTree* right;
} ChainBinTree;
// 初始化二叉树根节点
ChainBinTree* BinTreeInit(ChainBinTree* node){
if(node != NULL){
return node;
}else {
return NULL;
}
}
// bt 是父节点 node是子节点 n是1 是添加左树 2是右树
int BinTreeAddNode(ChainBinTree* bt, ChainBinTree* node, int n){
if(bt == NULL) {
puts("父节点不存在");
return 0;
}
if(n == 1){
if(bt -> left){
puts("left 子树节点不为空\n");
}else {
bt -> left = node;
}
}else if(n == 2){
if(bt -> right){
puts("right 子树节点不为空\n");
}else {
bt -> right = node;
}
}else {
puts("参数错误!");
return 0;
}
return 1;
}
// 返回left 子树
ChainBinTree* BinTreeLeft(ChainBinTree* bt){
if(bt) {
return bt -> left;
}else {
return NULL;
}
}
// 返回right 子树
ChainBinTree* BinTreeRight(ChainBinTree* bt){
if(bt) {
return bt -> right;
}else {
return NULL;
}
}
// 二叉树是否为空
int BinTreeIsEmpty(ChainBinTree* bt){
if(bt) {
return 0;
}else {
return 1;
}
}
// 求二叉树深度
int BinTreeDepth(ChainBinTree* bt) {
int dep1, dep2;
if(bt == NULL) {
return 0;
}else {
dep1 = BinTreeDepth(bt->left);
dep2 = BinTreeDepth(bt->right);
return dep1 > dep2 ? dep1 + 1 : dep2 + 1;
}
}
// 向二叉树中添加节点时,每个节点都是由malloc函数申请分配内存,
// 因此要清空二叉树,则必须使用free函数来释放节点所占的内存
void BinTreeClear(ChainBinTree* bt){
if(bt){
BinTreeClear(bt->left);
BinTreeClear(bt->right);
free(bt);
bt = NULL;
}
return;
}
c语言之二叉链表实现
猜你喜欢
转载自blog.csdn.net/qq_29334605/article/details/104130468
今日推荐
周排行