C语言如何创建二叉树?createbitree函数怎么实现?

99ANYc3cd6
预计阅读时长 10 分钟
位置: 首页 C语言 正文

创建二叉树的C语言实现

下面是一个完整的C语言实现,包括二叉树的创建、遍历和释放内存的代码。

createbitree c语言
(图片来源网络,侵删)

二叉树结构定义

#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct BiTNode {
    char data;              // 节点数据,假设为字符类型
    struct BiTNode *lchild; // 左孩子指针
    struct BiTNode *rchild; // 右孩子指针
} BiTNode, *BiTree;

创建二叉树函数

// 创建二叉树(按先序顺序输入,#表示空节点)
BiTree CreateBiTree() {
    char ch;
    scanf("%c", &ch);
    if (ch == '#') {
        return NULL;  // 返回空指针
    } else {
        BiTree T = (BiTree)malloc(sizeof(BiTNode));  // 创建新节点
        if (!T) {
            printf("内存分配失败!\n");
            exit(1);
        }
        T->data = ch;                    // 存储数据
        T->lchild = CreateBiTree();      // 递归创建左子树
        T->rchild = CreateBiTree();      // 递归创建右子树
        return T;
    }
}

二叉树遍历函数

// 先序遍历
void PreOrderTraverse(BiTree T) {
    if (T) {
        printf("%c ", T->data);      // 访问根节点
        PreOrderTraverse(T->lchild);  // 遍历左子树
        PreOrderTraverse(T->rchild);  // 遍历右子树
    }
}
// 中序遍历
void InOrderTraverse(BiTree T) {
    if (T) {
        InOrderTraverse(T->lchild);  // 遍历左子树
        printf("%c ", T->data);      // 访问根节点
        InOrderTraverse(T->rchild);  // 遍历右子树
    }
}
// 后序遍历
void PostOrderTraverse(BiTree T) {
    if (T) {
        PostOrderTraverse(T->lchild);  // 遍历左子树
        PostOrderTraverse(T->rchild);  // 遍历右子树
        printf("%c ", T->data);        // 访问根节点
    }
}

释放二叉树内存

// 释放二叉树内存
void DestroyBiTree(BiTree T) {
    if (T) {
        DestroyBiTree(T->lchild);  // 释放左子树
        DestroyBiTree(T->rchild);  // 释放右子树
        free(T);                   // 释放当前节点
    }
}

主函数示例

int main() {
    BiTree root;
    printf("请按先序顺序输入二叉树节点(#表示空节点):\n");
    root = CreateBiTree();
    printf("\n先序遍历结果: ");
    PreOrderTraverse(root);
    printf("\n中序遍历结果: ");
    InOrderTraverse(root);
    printf("\n后序遍历结果: ");
    PostOrderTraverse(root);
    printf("\n");
    DestroyBiTree(root);  // 释放内存
    return 0;
}

使用示例

假设我们要创建如下二叉树:

      A
     / \
    B   C
   / \   \
  D   E   F

运行程序时,应按先序顺序输入节点,用#表示空节点:

请按先序顺序输入二叉树节点(#表示空节点):
ABD##E##C#F##

程序输出:

先序遍历结果: A B D E C F 
中序遍历结果: D B E A C F 
后序遍历结果: D E B F C A 

注意事项

  1. 输入时必须严格按照先序顺序,包括空节点用#表示
  2. 递归实现简单,但对于深度很大的树可能导致栈溢出
  3. 实际应用中可能需要根据需求修改数据类型(如改为int等)
  4. 程序结束后记得调用DestroyBiTree释放内存,避免内存泄漏

这个实现涵盖了二叉树的基本操作,可以根据需要进行扩展或修改。

createbitree c语言
(图片来源网络,侵删)
createbitree c语言
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede调用文章首图不显示,怎么解决?
« 上一篇 2025-12-20
dede重编文章后日期为何不更新?
下一篇 » 2025-12-20

相关文章

取消
微信二维码
支付宝二维码

目录[+]