草庐IT

树和二叉树

全部标签

Java LeetCode篇-深入了解二叉树经典解法(三种方式实现:获取二叉树的最大深度)

🔥博客主页: 【小扳_-CSDN博客】❤感谢大家点赞👍收藏⭐评论✍  文章目录    1.0对称二叉树        1.1判断对称二叉树实现思路        1.2代码实现:判断对称二叉树    2.0二叉树的最大深度        2.1使用递归实现获取二叉树的最大深度思路    2.2代码实现:使用递归实现获取二叉树的最大深度    2.3使用非递归实现获取二叉树的最大深度思路    2.4代码实现:使用非递归实现获取二叉树的最大深度    2.5使用层序遍历实现获取二叉树的最大深度    2.6代码实现:使用层序遍历实现获取二叉树的最大深度    3.0二叉树的最小深度    3.1

leetcode二叉树

下面的两个题呢是比较类似的所以放在一起讲,更好的理解起来。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

数据结构:二叉树的遍历方式、前序中序和中序后序构建二叉树、以及C语言代码实现

二叉树的四种遍历方式:前序遍历:根--左--右中序遍历:左--根--右后序遍历:左--右--根  (发现规律了吗,前中后是相对于根结点而言的)层序遍历:从上往下,从左往右我画了一个图,应该是写对了,能看懂就应该算是理解了吧请忽略这些大小不一的圆,本人强迫症最近没心情犯通过两个遍历顺序构造二叉树:注意:只能由前序中序和中序后序构造二叉树,不能由前序和后序构造二叉树(必须要有中序)1、前序和中序    (1)前序遍历的第一个结点是根结点        (2)中序遍历中,根结点的左边为左子树,右边为右子树    (3)根据(1)和(2)的特性设置算法如下            先确定当前节点、左子树

LeetCode-二叉树OJ题

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五.总结一.链式二叉树在前边的文章中,我们已经了解到,二叉树可以有顺序存储和链式存储

二叉排序树(BST)创建详解之C语言版

一、算法原理二叉排序树(BinarySortTree或BinarySearchTree)又称二叉查找树,可以用来实现数据的快速查找,也方便数据的插入、删除等工作,因此适用于数据的动态查找。二叉排序树是一棵二叉树,其左子树上的元素都小于树根,右子树上的元素都大于树根,所有的子树也满足这个性质。要想实现二叉排序树的查找,需要事先已经建立了二叉排序树。其原理很简单,如果已知一个数组,则首先把数组的第一个元素存储到树根。读入第二个元素的时候需要和树根进行比较,比树根小则存到左子树,否则存到右子树。读入第三个元素时,依旧先和树根进行比较,如果大于树根元素,则存入右子树,否则就与当前左子树树根进行比较,小

线索二叉树(前中后序线索化与遍历)

一.线索化二叉树和普通二叉树的区别线索化二叉树,即给当前节点的左子节点为空或者右子节点为空的加一个指针指向当前节点的前驱或者后继(这样能充分利用节点的左右指针,遍历也方便,可以直接线性的遍历不需要递归)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遍历线索化的二叉树最关键是判断当前节点是否有后继节点,有则继续输出后继节点,没有则需要考虑当前节点的下一个节

【树与二叉树】堆的时间复杂度详解以及堆的应用—堆排序、TOP - K问题

​​📝个人主页:@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. 平衡二叉树

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