我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言二叉树的操作方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言二叉树的操作方法

本篇内容主要讲解“C语言二叉树的操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的操作方法”吧!

    二叉树分类

    满二叉树

    除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。也可以理解为每一层的结点数都达到最大值的二叉树。

    C语言二叉树的操作方法

    完全二叉树

    一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

    简单的说,完全二叉树就是最后一层可以有缺失的满二叉树(完全二叉树是一种特殊的满二叉树),并且是从右往左的缺失。

    C语言二叉树的操作方法

    二叉树性质

    • 若规定根节点的层数为1,则一棵树非空二叉树的第 i 层上最多有2^(i-1)个节点。

    • 若规定根节点层数为1,则深度为h的二叉树的最大节点数是2^h−1

    • 对任何一颗二叉树,如果叶节点(度为0的节点)个数为 n0 ,度为 2 的节点个数为 n2 ,则n0 = n2 + 1。

    • 若规定根节点层数为1,具有N个节点的满二叉树的深度为小于(log_2)N+1的最大整数。

    性质的使用

    在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

    A n

    B n + 1

    C n - 1

    D n / 2

    分析:

    设度为 0 的结点有 x0 个

    设度为 1 的结点有 x1 个

    设度为 2 的结点有 x2 个

    x0 + x1 + x2 = 2n

    x0 = x2 + 1

    由上面两个式子可推出:2 * 2x2 + x1 + 1 = 2n

    因为是完全二叉树,x1 可能是0,1,但是要使上式结果为偶数,x1只能是1,所以 x2 等于n , 选A。

    二叉树的遍历

    首先我们先创建一个简单的二叉树

    C语言二叉树的操作方法

    typedef char BTDataType;typedef struct BinaryTreeNode {struct BinaryTreeNode* left;struct BinaryTreeNode* right;BTDataType data;}BTNode;int main(){BTNode* A = (BTNode*)malloc(sizeof(BTNode));A->data = 'A';A->left = NULL;A->right = NULL;BTNode* B = (BTNode*)malloc(sizeof(BTNode));B->data = 'B';B->left = NULL;B->right = NULL;BTNode* C = (BTNode*)malloc(sizeof(BTNode));C->data = 'C';C->left = NULL;C->right = NULL;BTNode* D = (BTNode*)malloc(sizeof(BTNode));D->data = 'D';D->left = NULL;D->right = NULL;BTNode* E = (BTNode*)malloc(sizeof(BTNode));E->data = 'E';E->left = NULL;E->right = NULL;A->left = B;A->right = C;B->left = D;B->right = E;LevelOrder(A);}

    前序遍历

    前序(先序): 根 -> 左子树 -> 右子树

    预期结果:A B D E C

    //前序void PrevOrder(BTNode* root){if (root == NULL){//为了结果更加直观,将NULL打印printf("NULL ");return;}//先打印根的数据printf("%c ", root->data);//遍历左子树PrevOrder(root->left);//遍历右子树PrevOrder(root->right);}

    编译结果:

    C语言二叉树的操作方法

    中序遍历

    中序:左子树 -> 根 -> 右子树

    预期结果:D B E A C

    void MidOrder(BTNode* root){//为了结果更加直观,将NULL打印if (root == NULL){printf("NULL ");return;}MidOrder(root->left);printf("%c ", root->data);MidOrder(root->right);}

    编译结果:

    C语言二叉树的操作方法

    后序遍历

    后续:左子树 -> 右子树 -> 根

    预期结果:D E B C A

    void PostOrder(BTNode* root){if (root == NULL){printf("NULL ");return;}PostOrder(root->left);PostOrder(root->right);printf("%c ", root->data);}

    编译结果:

    C语言二叉树的操作方法

    层序遍历

    C语言二叉树的操作方法

    void LevelOrder(BTNode* root){//创建队列qQueue q;//初始化队列QueueInit(&q);//如果根结点不为空,将根节点入队列if (root) QueuePush(&q, root);//进行循环,直到队列为空while (!QueueEmpty(&q)){//获取队列的第一个数据,并打印QDataType front = QueueFront(&q);printf("%c ", front->data);//对头数据出队列QueuePop(&q);//如果左子树不为空,左子树入队列if (front->left != NULL){QueuePush(&q, front->left);}//如果右子树不为空,右子树入队列if (front->right != NULL){QueuePush(&q, front->right);}}}

    求二叉树的节点数

    int BTSize(BTNode* root){return root == NULL ? 0 :1 + BTSize(root->left) + BTSize(root->right);}

    求二叉树叶子结点个数

    int BTLeafSize(BTNode* root){if (root == 0) return 0;return root->left == NULL && root->right == NULL ? 1 : BTLeafSize(root->right) + BTLeafSize(root->left);}

    求二叉树的最大深度

    int maxDepth(BTNode* root){if (root == NULL)return 0;return 1 + fmax(maxDepth(root ->left),maxDepth(root ->right));}

    二叉树的销毁

    //二叉树的销毁//传二级指针是为了改变指针的指向void DistoryTree(BTNode** root){if (*root == NULL){return;}DistoryTree(&(*root)->left);DistoryTree(&(*root)->right);free(*root);*root = NULL;}

    到此,相信大家对“C语言二叉树的操作方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    C语言二叉树的操作方法

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    C语言二叉树的操作方法

    本篇内容主要讲解“C语言二叉树的操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的操作方法”吧!二叉树分类满二叉树除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二
    2023-06-30

    C语言中二叉树的常见操作是什么

    这篇文章主要讲解了“C语言中二叉树的常见操作是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中二叉树的常见操作是什么”吧!一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不
    2023-06-08

    c语言二叉树的前序遍历方法

    这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu
    2023-06-19

    C语言二叉树的建立与遍历方法

    本篇内容介绍了“C语言二叉树的建立与遍历方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录这里给一个样例树:总结这里给一个样例树:代码:
    2023-06-20

    C语言二叉树的遍历方法怎么实现

    这篇文章主要介绍“C语言二叉树的遍历方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言二叉树的遍历方法怎么实现”文章能帮助大家解决问题。 在本算法中先利用先序遍历创建了树,利用
    2023-06-26

    C语言之二叉树的遍历

    这篇文章主要介绍了C语言中二叉树的遍历:前序、中序、后序,认识二叉树结构最简单的方式就是遍历二叉树,感兴趣的小伙伴可以参考阅读本文
    2023-05-14

    C语言数据结构二叉树递归的方法

    本篇内容介绍了“C语言数据结构二叉树递归的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、二叉树的遍历算法二叉树的精髓在于遍历。遍历掌
    2023-06-30

    C++二叉搜索树的操作有哪些

    本文小编为大家详细介绍“C++二叉搜索树的操作有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++二叉搜索树的操作有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉搜索树概念与操作二叉搜索树的概念二
    2023-06-29

    C语言之平衡二叉树详解

    平衡二叉树是具有平衡属性的有序二叉树,本文主要介绍了C语言中的平衡二叉树,具有一定的参考价值,需要的小伙伴可以参考阅读
    2023-05-17

    深入探究C语言中的二叉树

    树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。本文将带你深入探究C语言中的二叉树,感兴趣的同学跟着小编一起学习吧
    2023-05-19

    C语言中二叉树的示例分析

    这篇文章主要为大家展示了“C语言中二叉树的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中二叉树的示例分析”这篇文章吧。树概念及结构树是一种 非线性 的数据结构,它是由 n ( n
    2023-06-29

    JAVA二叉树的基本操作

    目录记录二叉树的基本操作DEMO1、创建一个二叉树类2、然后创建二叉树的节点记录二叉树的基本操作DEMO1、创建一个二叉树类这里约束了泛型只能为实现了Comparable这个接口的类型。/** * @author JackHui * @version Bina
    2021-12-08

    C语言平衡二叉树的示例分析

    这篇文章给大家分享的是有关C语言平衡二叉树的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一
    2023-06-25

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录