广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言二叉树的操作方法
  • 103
分享到

C语言二叉树的操作方法

2023-06-30 10:06:12 103人浏览 独家记忆
摘要

本篇内容主要讲解“C语言二叉树的操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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语言二叉树的操作方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: C语言二叉树的操作方法

    本文链接: https://www.lsjlt.com/news/328153.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

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

    下载Word文档
    猜你喜欢
    • C语言二叉树的操作方法
      本篇内容主要讲解“C语言二叉树的操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言二叉树的操作方法”吧!二叉树分类满二叉树除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二...
      99+
      2023-06-30
    • c语言二叉树的前序遍历方法
      这篇文章主要讲解了“c语言二叉树的前序遍历方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言二叉树的前序遍历方法”吧!题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,nu...
      99+
      2023-06-19
    • C语言中二叉树的常见操作是什么
      这篇文章主要讲解了“C语言中二叉树的常见操作是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中二叉树的常见操作是什么”吧!一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不...
      99+
      2023-06-08
    • C语言二叉树的建立与遍历方法
      本篇内容介绍了“C语言二叉树的建立与遍历方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录这里给一个样例树:总结这里给一个样例树:代码:...
      99+
      2023-06-20
    • C语言之二叉树的遍历
      目录0.写在前面1.前序遍历步骤详解代码实现2.中序遍历步骤详解代码实现3.后序遍历步骤详解代码实现0.写在前面 认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种...
      99+
      2023-05-14
      C语言实现二叉树遍历 二叉树遍历
    • C语言实现BST二叉排序树的基本操作
      本文实例为大家分享了C语言实现BST二叉排序树的基本操作代码,供大家参考,具体内容如下 BST-二叉排序树的几个基本操作。 头文件声明与函数定义 #include <std...
      99+
      2022-11-12
    • C语言二叉树的遍历方法怎么实现
      这篇文章主要介绍“C语言二叉树的遍历方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言二叉树的遍历方法怎么实现”文章能帮助大家解决问题。     在本算法...
      99+
      2023-06-26
    • C语言数据结构二叉树递归的方法
      本篇内容介绍了“C语言数据结构二叉树递归的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、二叉树的遍历算法二叉树的精髓在于遍历。遍历掌...
      99+
      2023-06-30
    • C语言数据结构详细解析二叉树的操作
      目录二叉树分类二叉树性质性质的使用二叉树的遍历前序遍历中序遍历后序遍历层序遍历求二叉树的节点数求二叉树叶子结点个数求二叉树的最大深度二叉树的销毁二叉树分类 满二叉树 除最后一层无任何...
      99+
      2022-11-13
    • C语言二叉树层序遍历
      实现下面图中的二叉树层序遍历 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&g...
      99+
      2022-11-13
    • C语言平衡二叉树详解
      目录调整措施:一、单旋转二、双旋转AVL树的删除操作:删除分为以下几种情况:1.要删除的节点是当前根节点T。2、要删除的节点元素值小于当前根节点T值,在左子树中进行删除。3、要删除的...
      99+
      2022-11-12
    • C语言树与二叉树基础全刨析
      目录一、树的概念和结构1.1 树的概念1.2 树的结构 & 相关名词解释1.3 树的表示1.4 树的应用二、二叉树的概念 & 存储结构(重要)2.1 二叉树的概念2....
      99+
      2022-11-13
    • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树
      链接:C语言数据结构系列之树的概念结构和常见表示方法 0x00 概念 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可...
      99+
      2022-11-13
    • C语言之平衡二叉树详解
      目录什么是平衡二叉树平衡二叉树的基本特点为什么会出现平衡二叉树二叉树四种不平衡的情况C语言实现平衡二叉树什么是平衡二叉树 平衡二叉树是具有平衡属性的有序二叉树,所谓的平衡即当前树的左...
      99+
      2023-05-17
      C语言二叉树 C语言平衡二叉树
    • 深入探究C语言中的二叉树
      目录1.树概念及结构1.1树的概念 1.2 树的相关概念1.3 树的表示2.二叉树概念及结构   2.1概念2.2 特殊的二叉树2.3 二叉树的性质&n...
      99+
      2023-05-19
      C语言二叉树 C语言数据结构
    • C语言中二叉树的示例分析
      这篇文章主要为大家展示了“C语言中二叉树的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中二叉树的示例分析”这篇文章吧。树概念及结构树是一种 非线性 的数据结构,它是由 n ( n...
      99+
      2023-06-29
    • C语言数据结构之二叉链表创建二叉树
      目录一、思想(先序思想创建)二、创建二叉树(1)传一级参数方法(2)传二级参数方法一、思想(先序思想创建) 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建...
      99+
      2022-11-13
    • C语言深入浅出解析二叉树
      目录树概念及结构相关概念树的表示树在实际中的运用(表示文件系统的目录树结构)二叉树概念及结构概念需要注意的特殊二叉树二叉树的性质二叉树的存储结构顺序存储链式存储总结树概念及结构 树是...
      99+
      2022-11-13
    • C语言线索二叉树基础解读
      目录线索二叉树的意义线索二叉树的定义线索二叉树结构的实现二叉树的线索存储结构二叉树的中序线索化线索二叉树的中序遍历总结线索二叉树的意义 对于一个有n个节点的二叉树,每个节点有指向左右...
      99+
      2022-11-13
    • C语言平衡二叉树真题练习
      目录一、题目描述二、解题思路自顶向下的递归(暴力解法)自底向上的递归(最优解法)题目难度:简单 LeetCode链接:平衡二叉树 一、题目描述 给定一个二叉树,判断它是否是高度平衡的...
      99+
      2022-11-13
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作