c语言之二叉链表实现

#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;
}
发布了40 篇原创文章 · 获赞 12 · 访问量 860

猜你喜欢

转载自blog.csdn.net/qq_29334605/article/details/104130468
今日推荐