首页 > 其他 > 详细

二叉树实现

时间:2021-01-21 16:28:40      阅读:28      评论:0      收藏:0      [点我收藏+]
#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;
}

二叉树实现

原文:https://blog.51cto.com/14982125/2600402

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!