二叉树实现

结构体创建

核心逻辑

定义了二叉树的基本结构 TreeNode,每个节点包含一个字符型数据 data,以及指向左右子树的指针 leftright

复制代码
typedef char DataType;

typedef struct BiTNode 
{
    DataType data;
    struct BiTNode *left;
    struct BiTNode *right;
} TreeNode;
树的创建(前序构造)

核心逻辑

利用前序遍历方式,根据字符数组构造二叉树。遇到 # 表示该节点为空(空子树)。递归构造左右子树。

复制代码
DataType data[] = "Abd#g###ce#h##fi###";
int ind = 0;

void CreatTree(TreeNode **tree) 
{
    char c = data[ind++];
    if (c == '#') 
    {
        *tree = NULL;
        return;
    } 
      else 
      {
        *tree = malloc(sizeof(TreeNode));
        if (*tree == NULL) 
        {
            printf("malloc tree error\n");
            return;
        }
        (*tree)->data = c;
        CreatTree(&(*tree)->left);
        CreatTree(&(*tree)->right);
    }
}
三种遍历函数

核心逻辑

前序遍历(根-左-右):先访问当前节点,再访问左子树和右子树。

中序遍历(左-根-右):先访问左子树,再访问当前节点,最后访问右子树。

后序遍历(左-右-根):先访问左子树和右子树,最后访问当前节点。

复制代码
void PreOrderTraverse(TreeNode *tree) 
{
    if (tree == NULL) return;
    printf("%c", tree->data);
    PreOrderTraverse(tree->left);
    PreOrderTraverse(tree->right);
}

void InoderderTraverse(TreeNode *tree) 
{
    if (tree == NULL) return;
    InoderderTraverse(tree->left);
    printf("%c", tree->data);
    InoderderTraverse(tree->right);
}

void PosederTraverse(TreeNode *tree) 
{
    if (tree == NULL) return;
    PosederTraverse(tree->left);
    PosederTraverse(tree->right);
    printf("%c", tree->data);
}
层序遍历函数 ShowTree

核心逻辑

通过辅助队列 lqe 进行层序遍历,从上至下、从左至右访问每一个节点。队列中维护每层的节点顺序,每次出队一个节点,就将其左右子节点(如果存在)入队,直到队列为空

模块 函数名 功能说明
节点结构 TreeNode 定义二叉树节点数据结构
树构建 CreatTree 递归前序方式构建二叉树(支持空节点)
前序遍历 PreOrderTraverse 根 -> 左 -> 右
中序遍历 InoderderTraverse 左 -> 根 -> 右
后序遍历 PosederTraverse 左 -> 右 -> 根
层序遍历 ShowTree 借助队列按层输出节点内容
主程序入口 main 构建树、调用遍历函数测试