下面的两个题呢是比较类似的所以放在一起讲,更好的理解起来。https://leetcode.cn/problems/same-tree/description/这个题就是比较两颗树是不是一样的,这个其实看起来就只要比较当前节点,我们分析成子问题就是判断两颗树当前节点是不是一致的,比如p和q的val还有就是为空的时候我们,这样我们的代码其实就写好了。boolisSameTree(structTreeNode*p,structTreeNode*q){if(p==NULL&&q==NULL){returntrue;}if(p==NULL||q==NULL){returnfalse;}if(p->va
二叉树的四种遍历方式:前序遍历:根--左--右中序遍历:左--根--右后序遍历:左--右--根 (发现规律了吗,前中后是相对于根结点而言的)层序遍历:从上往下,从左往右我画了一个图,应该是写对了,能看懂就应该算是理解了吧请忽略这些大小不一的圆,本人强迫症最近没心情犯通过两个遍历顺序构造二叉树:注意:只能由前序中序和中序后序构造二叉树,不能由前序和后序构造二叉树(必须要有中序)1、前序和中序 (1)前序遍历的第一个结点是根结点 (2)中序遍历中,根结点的左边为左子树,右边为右子树 (3)根据(1)和(2)的特性设置算法如下 先确定当前节点、左子树
1.单值二叉树 965. 单值二叉树https://leetcode.cn/problems/univalued-binary-tree/ 先判断这棵树是否为空,如果是空树则是true。再判断左子树是否为空,并且左子树的值val和当前节点的val不相同,如果这左子树不为空且val不等于root的val则返回false,再使用相同方式判断右子树。最后递归一下左右子树即可,只有左右子树有一个返回false,则整体返回false。boolisUnivalTree(structTreeNode*root){if(root==NULL)returntrue;if(root->left&&root->le
前言:哈喽小伙伴们,上篇文章我们讲述了一个特殊的二叉树——使用数组实现的堆的基本知识之后呢,从这篇文章开始,我们就正式进入普通二叉树的介绍啦,二叉树真正的难点——递归,即将来临,小伙伴们注意不要掉队哦。目录一.链式二叉树二.遍历二叉树三.二叉树的实现1.二叉树的定义2.创建二叉树节点四.二叉树的操作1.先序遍历2.中序遍历3.后序遍历4.节点个数递归分析5.叶节点数6.树的高度7.第k层节点数8.查找指定值节点9.销毁二叉树四.完整代码展示1.BinaryTree.h2.BinaryTree.c3.test.c五.总结一.链式二叉树在前边的文章中,我们已经了解到,二叉树可以有顺序存储和链式存储
一.线索化二叉树和普通二叉树的区别线索化二叉树,即给当前节点的左子节点为空或者右子节点为空的加一个指针指向当前节点的前驱或者后继(这样能充分利用节点的左右指针,遍历也方便,可以直接线性的遍历不需要递归)1.左子节点为空,指向当前节点的前驱节点2.右子节点为空,指向当前节点的后继节点3.节点的顺序可以为(前序、中序、后序)遍历的顺序比如,中序遍历结果为:{8,3,10,1,14,6}、前序:{1,3,8,10,6,14}、后序:{8,10,3,14,6,1}3的前驱就是8,3的后继就是10遍历线索化的二叉树最关键是判断当前节点是否有后继节点,有则继续输出后继节点,没有则需要考虑当前节点的下一个节
📝个人主页:@Sherry的成长之路🏠学习社区:Sherry的成长之路(个人社区)📖专栏链接:数据结构🎯长路漫漫浩浩,万事皆有期待文章目录1.堆的时间复杂度1.1向下调整建堆1.2向上调整建堆2.堆的应用2.1堆排序2.2TOP-K问题2.2.1方法1:2.2.2方法2:2.2.3方法3:I.TOP-K.h用于函数的声明II.TOP-K.c用于函数的定义III.Test.c用于函数的测试3.总结:1.堆的时间复杂度因为堆是完全二叉树,而满二叉树也是完全二叉树,此处为了简化使用满二叉树来证明(时间复杂度本来看的就是近似值,多几个节点不影响最终结果)建堆的调用次数用T(N)表示:(从最后一个非
二叉树的实现定义结构体我们首先定义一个结构来存放二叉树的节点结构体里分别存放左子节点和右子节点以及节点存放的数据typedefintBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinaryTreeNode*left; structBinaryTreeNode*right;}BTNode;构造一个二叉树我们首先定义一个新建新节点的函数,方便构造二叉树BTNode*buynode(BTDataTypex){ BTNode*node=(BTNode*)malloc(sizeof(BTNode)); if(node==NU
LeetCode|110.平衡二叉树OJ链接首先计算出二叉树的高度然后计算当前节点的左右子树的高度,然后判断当前节点的左右子树高度差是否超过1,最后递归地检查左右子树是否也是平衡的。//计算二叉树的高度intheight(structTreeNode*root){if(root==NULL)returnNULL;intleft=height(root->left);intright=height(root->right);returnleft>right?left+1:right+1;}//判断是否是平衡二叉树boolisBalanced(structTreeNode*root){if(roo
🔥博客主页:小羊失眠啦.🎥系列专栏:《C语言》《数据结构》《Linux》《Cpolar》❤️感谢大家点赞👍收藏⭐评论✍️文章目录一、前置说明二、二叉树的遍历2.1前序遍历2.2中序遍历2.3后序遍历2.4层序遍历三、二叉树的结点个数3.1二叉树的总结点数3.2二叉树的叶子结点数3.3二叉树第k层结点数四、二叉树的高度/深度五、二叉树的查找六、二叉树的创建和销毁一、前置说明在学习二叉树各种各样的操作前,我们先来回顾一下二叉树的概念:二叉树是度不超过2的树,由根结点和左右2个子树组成,每个子树也可以看作一颗二叉树,又可以拆分为根结点和左右两颗子树…是不是很熟悉,一个大问题可以拆分为两个子问题,每个
二叉树一、树的概念及结构1.树的概念2.树的相关概念3.树的表示4.树在实际中的应用二、二叉树的概念及结构1.二叉树的概念2.满二叉树3.完全二叉树4.二叉树的性质5.二叉树的储存结构三、二叉树的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历四、手撕二叉树(务必理解的基本知识!)1.二叉树销毁(后序销毁)2.二叉树的高度3.二叉树节点个数4.二叉树叶子节点个数5.二叉树第k层节点个数6.二叉树查找值为x的节点7.判断二叉树是否是完全二叉树(队列辅助)一、树的概念及结构1.树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树,是因为它看起来