目录一棵树转换成一棵二叉树一棵二叉树转换成一棵树森林转换一棵二叉树一棵二叉树转换森林一棵树转换成一棵二叉树一棵树转换成二叉树的过程:①树中所有相邻兄弟之间加一条连线。②对树中的每个结点只保留它与长子(即最左边的孩子结点)之间的连线,删除与其他孩子之间的连线。③以树的根节点为轴心,将整棵树顺时针转动45°,使结构层次分明。例题1:Step1:Step2:Step3:例题2:Step1:Step2:Step3:一棵二叉树转换成一棵树一棵二叉树转换成一棵树的过程:①若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子等都与该结点的双亲结点用连线连起来。②删除原二叉树中所有双亲结点与右孩子结点
🔥博客主页: 【小扳_-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
下面的两个题呢是比较类似的所以放在一起讲,更好的理解起来。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.双手剑士的最优搭配每把剑有攻击力和防御力两个属性。双手剑士可以同时拿两把剑,其得到攻击力为两把剑中的攻击力的最大值,防御力为两把剑中的防御力的最小值。现在想让双手剑士的攻击力和防御力之和最大。输入n作为剑的个数,再输入2n分别对应每把剑的攻击力和防御力,要求输出最优解为哪两把剑(当攻击力和防御力之和相同时优先选择编号靠前的两把剑)输入:31045 1078输出:12题解为#includeintmax(intx,inty)//最大值函数{if(x>y)returnx;returny;}intmin(int
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五.总结一.链式二叉树在前边的文章中,我们已经了解到,二叉树可以有顺序存储和链式存储
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟追风赶月莫停留🌟🌟🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🌟🌟平芜尽处是春山🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅📝数据结构OJ题✏️移除元素✏️删除重复项✏️合并两个数组✏️移除元素题目链接:原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)我在这里给大家提供了常规的三种解法,第一种解法是错误示范解法一:大家首先肯定想到的是边遍历边删除,当然这也是常
一、算法原理二叉排序树(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遍历线索化的二叉树最关键是判断当前节点是否有后继节点,有则继续输出后继节点,没有则需要考虑当前节点的下一个节