qidao123.com技术社区-IT企服评测·应用市场

标题: 重生之我在异天放学编程之数据结构与算法:深入数和二叉树篇 [打印本页]

作者: 瑞星    时间: 2025-1-6 06:55
标题: 重生之我在异天放学编程之数据结构与算法:深入数和二叉树篇
大家好,这里是小编的博客频道
小编的博客:就爱学编程
    很高兴在CSDN这个大家庭与大家相识,盼望能在这里与大家共同进步,共同收获更好的本身!!!
  
  


   那接下来就让我们开始遨游在知识的海洋!
  
一、树的根本概念

   界说:树是一种非线性数据结构,它由 n(n≥0)个有限节点组成一个具有层次关系的集合。它有一个特殊的节点,称为根节点,别的节点分成 m(m≥0)个互不相交的子集,每个子集又是一棵树,称为原树的子树。
  根本术语:
   
  表示方法:可以用孩子链表表示法、双亲孩子表示法和孩子-兄弟表示法等来表示一棵树

二、二叉树的根本概念

   界说:二叉树是树形结构的一种特殊形式,它的特点是每个节点最多有两个子节点,通常被称为左子节点和右子节点。
  性子:
   在二叉树的第 i 层上至多有 2^(i-1) 个节点(i≥1)。
深度为 k 的二叉树至多有 2^k - 1 个节点(k≥1)。
对任何一棵二叉树 T,如果其终端节点数为 n0,度为 2 的节点数为 n2,则 n0 = n2 + 1。
  分类:
   满二叉树:一棵深度为 k 且有 2^k - 1 个节点的二叉树称为满二叉树。
完全二叉树:深度为 k 的,有 n 个节点的二叉树,当且仅当其每一个节点都与深度为 k 的满二叉树中编号从 1 至 n 的节点逐一对应时称之为完全二叉树。
  遍历方法:
   
  
三、在 C 语言中实现二叉树

在 C 语言中,可以使用结构体和指针来实现二叉树。以下为例:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // 定义二叉树节点结构体
  4. typedef struct TreeNode {
  5.     int val;
  6.     struct TreeNode *left;
  7.     struct TreeNode *right;
  8. } TreeNode;
  9. // 创建新节点
  10. TreeNode* createNode(int val) {
  11.     TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
  12.     newNode->val = val;
  13.     newNode->left = NULL;
  14.     newNode->right = NULL;
  15.     return newNode;
  16. }
  17. // 前序遍历
  18. void preOrderTraversal(TreeNode* root) {
  19.     if (root == NULL) return;
  20.     printf("%d ", root->val);
  21.     preOrderTraversal(root->left);
  22.     preOrderTraversal(root->right);
  23. }
  24. // 中序遍历
  25. void inOrderTraversal(TreeNode* root) {
  26.     if (root == NULL) return;
  27.     inOrderTraversal(root->left);
  28.     printf("%d ", root->val);
  29.     inOrderTraversal(root->right);
  30. }
  31. // 后序遍历
  32. void postOrderTraversal(TreeNode* root) {
  33.     if (root == NULL) return;
  34.     postOrderTraversal(root->left);
  35.     postOrderTraversal(root->right);
  36.     printf("%d ", root->val);
  37. }
  38. int main() {
  39.     // 创建二叉树
  40.     TreeNode* root = createNode(1);
  41.     root->left = createNode(2);
  42.     root->right = createNode(3);
  43.     root->left->left = createNode(4);
  44.     root->left->right = createNode(5);
  45.     // 遍历二叉树
  46.     printf("Pre-order traversal: ");
  47.     preOrderTraversal(root);
  48.     printf("
  49. ");
  50.     printf("In-order traversal: ");
  51.     inOrderTraversal(root);
  52.     printf("
  53. ");
  54.     printf("Post-order traversal: ");
  55.     postOrderTraversal(root);
  56.     printf("
  57. ");
  58.     // 注意:这里只是示例代码,没有实现释放内存的操作,实际使用中需要添加释放内存的代码以避免内存泄漏。
  59.     return 0;
  60. }
复制代码


快乐的时光总是短暂,咱们下篇博文再见啦!!!不要忘了,给小编点点赞和收藏支持一下,在此非常感谢!!!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4