首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【数据结构】C语言实现二的基本操作——二的层次遍历、深度、结点数……

C语言实现二的基本操作 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中,咱们详细介绍了二的三种遍历算法以及算法的递归与非递归之间的转换。...在今天的内容中我们将会继续介绍二的一些基本操作如二的层次遍历、的深度、的结点总数、第K层的结点数、的叶结点数……以及如何通过C语言来实现这些基本操作。...l + 1 : r + 1;//返回左右子树深度的最大值+1 } 可以看到当我们在的深度时,我们将其拆分成了子树的深度和右子树的深度,这种将问题拆分的思路是算法中的分治思想,目前我们先简单的了解一下...3.3 树叶结点数 二中的叶结点指的是其左右子树都为空的结点,我们要求一棵二中的叶结点数,肯定是需要遍历整棵二,因此叶结点数的实现也是有多种方式,这里我们还是介绍层序遍历与递归两种方式...在下一篇内容中,我们将会介绍如何通过C语言实现一棵二,大家记得关注哦!!!最后感谢各位朋友的支持,咱们下一篇再见!!!

18510

面试题:前中序后序、中后序前序

每一个结点,我们可以Java语言这样实现: /** * 二结点 */ public class TreeNode { public char value; /** * 左子树...我们可以Java语言这样实现: public void preOrder(TreeNode biTree) { if(biTree.left !...我们可以Java语言这样实现: public void preOrder(TreeNode biTree) { if(biTree.left !...已知前中序遍历顺序,后序遍历顺序 扯了这么,还是回到刚刚的第一道面试题上: 已知二的前序遍历顺序为ABCDEGHF,中序遍历顺序为DBAGEHCF,该二的后序遍历。...H)肯定为E的右子树,可以最终判断出二是这样的: 写出后序遍历顺序 这个步骤就比较容易了,根据二得到的后序遍历顺序就是:DBGHEFCA 已知中后序遍历顺序,前序遍历顺序 扯了这么,还是回到刚刚的第一道面试题上

27210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试题:前中序后序、中后序前序

    DBAGEHCF,该二的后序遍历。...每一个结点,我们可以Java语言这样实现: /** * 二结点 */ public class TreeNode { public char value; /** * 左子树...我们可以Java语言这样实现: public void preOrder(TreeNode biTree) { if(biTree.left !...已知前中序遍历顺序,后序遍历顺序 扯了这么,还是回到刚刚的第一道面试题上: 已知二的前序遍历顺序为ABCDEGHF,中序遍历顺序为DBAGEHCF,该二的后序遍历。...写出后序遍历顺序 这个步骤就比较容易了,根据二得到的后序遍历顺序就是:DBGHEFCA 已知中后序遍历顺序,前序遍历顺序 扯了这么,还是回到刚刚的第一道面试题上: 已知二的中序遍历顺序为DBAGEHCF

    1.8K21

    】之二(C语言)(含图解)

    主要用的是二 现实中的二 这还是个满二 概念 与普通的最大的不同是它最多只有两个子树。 特殊的二 满二:每一层都是满的。...搜索二:任何一棵,左子树都比跟要小,右子树都比根要大。在搜索中查找一个数,最多查找高度次。时间复杂度O(N)。 引申:左右两边的结点数量比较均匀。...n0,度为2的分支结点个数为n2,则有n0 = n2 +1(度为2的结点个数总是比度为0的结点个数1) 4.若规定根节点的层数是1,具有n个结点的满二的深度是h = log2 N +1(以2为底N...二顺序存储在物理上是一个数组,在逻辑上是一颗二。 链式存储 二的链式存储结构是指,链表来表示一棵二,即用链来指示元素的逻辑关系。...构成&遍历 任何一个二由三个部分构成 1.根节点——2.左子树——3.右子树 分治算法:分而治之,大问题分成子问题,子问题再分成子问题,直到无法分割 前序遍历:根左右—— (上图:A-B-D-NULL-NULL-E-NULL-NULL-C-NULL-NULL

    50610

    线索二C语言王道

    目录 线索二概念 ——普通二缺点 ——中序线索二 ——先序线索二 ——后序线索二  —— 三种线索二的比较 二的线索化 普通方法代码 中序线索化代码 先序线索化代码 后序线索二代码...---- 线索二概念 ——普通二缺点 1、普通二在遍历的时候必须从根节点出发,不能从其中某一点开始遍历。...2、普通二不能快速的找到某个结点的前驱。...n个结点的二,有n+1个空链域!...和上同理 ——后序线索二  和上同理 —— 三种线索二的比较 ---- 二的线索化 土方法找到中序遍历前驱 普通方法代码 //辅助全局变量,用于查找p的前驱 BiTNode *

    74030

    C语言的实现

    BC的父节点是A 堂兄弟:D的堂兄弟是EF 根据上面的概念和上面对的定义你应该知道这是一个二。...由于二的广泛应用与研究,所以这里我们讨论二,其实森林和一般都可以转化为一个一般,转换原则就是把一个节点的第一个子节点变成二的左节点,然后其他堂兄弟就是右节点,这句话不指望你能看懂,因为我都感觉没有表述清楚...,我认为这个视频讲得比较好http://pan.baidu.com/s/1i3yYd2t 然后我们再细分二,它分为: 空二:就是什么都没有 满二:每个节点都有两个子节点 完全二:把一颗完全二的最后一层从右往左删除一些节点得到的就是完全二...二也分顺序存储和链式存储,因为顺序存储比较浪费内存,所以这里考虑链式存储实现 struct node{ char data; struct node *lchild; struct node...接下来就是中序遍历,中序遍历就是先遍历左节点,然后遍历根,最后右节点,所以遍历顺序就是DBAGECF 最后是后序遍历,后序遍历是先遍历左节点然后右节点最后根,所以遍历顺序是DBGEFCA 这里看似很麻烦,但是如果我们代码写其实很简单

    1.7K20

    c语言建立二的算法代码(C语言数据结构二实现)

    BT* Create_tree()// 创建二 { BT *bt; char x; scanf("%c",&x); getchar(); if (x ==...); bt->r_chrild = Create_tree(); } return bt; } 先序遍历二:思路, 当二不为空时 访问根节点 遍历根节点左子树...node_num(bt->r_chrild, node); } } 深度: 这个一定要好好想想 思路: 从二的根节点开始: 若二树根节点为空,返回0, 否则: 递归统计左子树的深度...递归结束,返回左右子树深度的较大值,即二的深度 int tree_depth(BT *bt) // 二深度,就是最大层数 { int l_dep, r_dep; //定义两个变量,存放左...,又称翻转二: // 就是所有节点对换, 也可以非递归栈实现,与此类似 //这里是递归实现 void reversal(BT *bt) // 镜像二 { BT *p; if

    3.6K10

    C语言每日一题(55)另一颗子树

    力扣 572 另一棵子树 题目描述 给你两棵二 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。...二 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。...[1, 2000] subRoot 树上的节点数量范围是 [1, 1000] -104 <= root.val <= 104 -104 <= subRoot.val <= 104 思路分析 和相同二是一个道理...,但有一个情况:当根节点相同时,我们还得去比较所匹配子树的左右结点,而且会存在根节点不相同的情况,就需要去到左右结点去找,直到找到相同的。...* struct TreeNode *right; * }; */ bool check(struct TreeNode* q, struct TreeNode* p) {//借用相同二的功能

    8710

    C语言的基本操作

    是数据结构中一门很重要的数据结构,在很多地方都能经常见到他的面孔,比如数据通信,压缩数据等都能见到的身影。但是最常见的还是相对简单的二,二和常规都可以进行相互转换。...所以,二的操作必不可少。我这里来简单介绍一下。 在数据结构中给的和图中,我们最好使用递归来进行各种操作,会让代码更清晰易懂,代码也会更简洁。...层次遍历二 void levelorder(BiTree T) { //一个队列保存结点信息,这里的队列采用的是顺序队列中的数组实现 int front = 0; int rear = 0;...n", tempNode->data); } } } 复制 将二复制给另一个二 void copybitree(BiTree T, BiTree *newT) { if (T ==...交换一颗二的左右子树 void exchange(BiTree T) { BiTree p; if (T !

    1.2K40

    数据结构——二查找(C语言)

    查找,也称作二搜索,有序二,排序二,而当一棵空或者具有下列性质的二,就可以被定义为二查找: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值。...若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值。 任意节点的左、右子树也分别为二查找。 没有键值相等的节点。...二查找相比于其他数据结构的优势在查找、插入的时间复杂度较低,为O(log n)。二查找是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。...("中序遍历二: \n"); InorderTravel(T); printf("后序遍历二: \n"); PostorderTravel(T); printf...127's left child 前序遍历二: 21 2150 127 121 中序遍历二: 21 121 127 2150 后序遍历二: 121 127 2150 21 最大值: 2150

    1.8K41

    【数据结构】C语言实现二

    C语言实现二 导读 大家好,很高兴又和大家见面啦!!! 经过前面两篇内容的介绍,我相信大家对二的基本操作已经比较熟悉了,并且能够自己通过C语言来实现这些基本操作。...那么为了弥补这个遗憾,在今天的内容中,我们将通过C语言来实现一棵二,并对前面介绍的这些基本操作进行相应的测试。...3.2.2 通过C语言实现结点序列构建二 当我们需要通过C语言来构建一棵二时,我们获取的结点序列可能与手算时有些许不同,比如先序序列"ABD##E#H##CF##G##"在这个序列中#代表的是空结点...,这些字符代表的才是二中对应的结点,因此我们不难得出该二的形态: 在这种情况下我们如果要通过C语言来实现的话可以通过先序遍历的方式来创建二,代码如下所示: //二的创建 BTN* BTCreat...五、基本操作的测试 现在我们已经完成了创建和销毁两个基本操作了,接下来就可以通过创建二后进行遍历、的深度、总结点数、第K层的结点数、叶子结点数等功能的测试了。

    18510

    【初阶数据结构】掌握二遍历技巧与信息求解:深入解析四种遍历方法及的结构与统计分析

    图片 个人主页: 是店小二呀 C语言笔记专栏: C语言笔记 C++笔记专栏: C++笔记 初阶数据结构笔记专栏: 初阶数据结构笔记 喜欢的诗句:无人扶我青云志 我自踏雪至山巅 一、快速搭建二...二大致分为两种 空 非空:根节点,的左子树,右子树(左右子树可能为空) 从概念中可以看出来,根据不同节点可以划分多个子树,对此二定义是递归式的,因此后续基本操作都是按照概念实现的。...尝试下前序/中序/后序,写出访问顺序(空也会访问,N代表) 前序:123NNN45NN6NN 中序:N3N2N1N5N4N6N 后序:NN3N2NN5NN641 过程解析: 达到1号节点为根,访问左子树...使用场景:判断是否为完全二(C++代码)。...4.3 这个棵的高度 过程解析:这里也是使用了分治的思想,整棵高度分为左右子树高度之间最大的高度再+1 瑕疵版本: int TreeHeight(TreeNode* root) { if (

    17010

    数据结构初阶 · 链式二的部分问题

    前言: 链式二我们在C语言阶段已经实现了,这里介绍的是涉及到的部分问题,比如的高度,的节点个数等,连接部分就手动连接,一个样例来介绍涉及到的几个问题。...1 链式二的创建 因为是链式二,所以有两个指针,分别指向右孩子节点和左孩子节点,给上值,手动连接即可: typedef struct TreeNode { struct TreeNode* left...node4->left = node5; node4->right = node6; //node5->left = node7; return node1; } 整体构建出来就是这样,对于初学链式二的同学来说...的节点个数是一样的,总节点个数,我们可以把分为左右子树,把一个拆分成无数的左右子树,统计每个左右子树的节点个数,相加即可。...,也就是说会重复计算,这里不要小看重复计算,没有记录那么所有的计算都会翻二倍,而每一层都没有记录,所有越往层数的走,就会变成2^n的重复计算,是指数量级的增长,所以我们应该记录数据: size_t TreeHeight

    5810
    领券