#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; }