二叉树实现

#include<stdio.h>
typedef char DataType;
typedef struct BNode
{
DataType _data;
struct BNode* _left;
struct BNode* _right;
}BNode;
//ABD##E#H##CF##G##
BNode* creatBTree(DataType arr[], int idex)
{
if (arr[idex] == ‘#’)
{
(idex)++;
return NULL;
}
else
{
//创建以当前数据为根的子树
BNode
root = (BNode
)malloc(sizeof(BNode));
root->_data = arr[idex];
++(idex);
root->_left = creatBTree(arr, idex);
root->_right = creatBTree(arr, idex);
return root;
}
}
//前序
void preOrder(BNode
root)
{
if (root)
{
printf("%c", root->_data);
preOrder(root->_left);
preOrder(root->_right);
}
}
void inOrder(BNode
root)
{
if (root)
{
inOrder(root->_left);
printf("%c", root->_data);
inOrder(root->_right);
}
}
int bTreeKSize(BNode
root, int k)
{
if (root == NULL) return 0;
if (k == 1) return 1;
return bTreeKSize(root->_left, k - 1) +bTreeKSize(root->_right, k - 1);
}
BNode* bTreeFing(BNode* root, DataType ch)
{
if (!root) return NULL;
if (root->_data == ch) return root;
BNode* node = bTreeFind(root->_left, ch);
if (node)
return node;
return bTreeFind(root->_right, ch);
}
//销毁,无野指针
void bTreeDestroy(BNode** root)
{
if (*root){
bTreeDestroy(&((*root)->_left));
bTreeDestroy(&((*root)->_right));
free(*root);
root = NULL;
}
}
//销毁,有野指针
void bTreeDestroy(BNode
root)
{
if (root){
bTreeDestroy(&((root)->_left));
bTreeDestroy(&((root)->_right));
free(root);
root = NULL;
}
}

void test()
{
char arr[] = “ABD##E#H##CF##G##”;
int idex = 0;
BNode* root = creatBTree(arr, &idex);
}
int main()
{
test();
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值