二叉树实现
作者:互联网
#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;
}
标签:BNode,return,实现,##,right,idex,二叉树,root 来源: https://blog.51cto.com/14982125/2600402