接着上次的,这里主要介绍的是堆排序,二叉树的遍历,以及之前讲题时答应过的简单二叉树问题求解堆排序给一组数据,升序(降序)排列思路思考:如果排列升序,我们应该建什么堆?首先,如果排升序,数列最后一个数是最大数,我们的思路是通过向上调整或者向下调整,数组存放的第一个数不是最小值(小堆)就是最大值(大堆),此时我们将最后一个数与第一个数交换,使得最大值放在最后,此时再使用向上调整或者向下调整,得到第二大的数,重复上述动作,很明显,我们需要的第一个数是最大值,因此我们需要建大堆反之,排降序,建立小堆代码#includevoiddownAdjust(int*pa,intparent,intn){ int
目录一、二叉树的简单概念(1)关于树的一些概念(2)二叉树的一些概念及性质定义二叉树的代码:二、二叉树的方法实现(1)createTree(2)preOrder(3)inOrder(4)postOrder(5)size(6)getLeafNodeCount(7)getKLevelNodeCount(8)getHeight(9)find(10)levelOrder(11)isCompleteTree三、最终代码一、二叉树的简单概念(1)关于树的一些概念结点的度:一个结点含有子树的个数称为该结点的度;如上图:A的度为6树的度:一棵树中,所有结点度的最大值称为树的度;如上图:树的度为6叶子结点或终端
看了网上的一些关于二叉树的高度与深度的解释,总感觉解释的有些模棱两可,以下给出较为简洁正确的理解。 1、究竟是二叉树的高度?还是节点的高度? 首先,二叉树的高度与深度都是针对于“节点”而言的,比如说我们要看“哪个节点”的高度、“哪个节点”的深度,一般是这么问。但是我们却常常听说“这颗二叉树的高度”或“深度”,其实,这样说的含义是指的针对“根节点”而言的“高度”和”深度“。2、判断高度与深度的方法 例如下图所示的二叉树,判断任意节点的高度: 就是看从这个节点到该节点的最深(最下面)的叶子节点的路径长度。关键在于是从”该节点“
617.合并二叉树(经典)合并二叉树是操作两棵树的题目里面很经典的,如何对两棵树遍历以及处理?给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL的节点将直接作为新二叉树的节点。示例1:注意:合并必须从两个树的根节点开始。思路参考:https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html如何同时遍历两个二叉树呢?其实和遍历一个树逻辑是一
1、二叉树的递归递归:2、二叉树遍历之DFS深度优先遍历2.1、遍历的概念每个节点都要恰好被访问一次,本质上是二叉树的线性化。一个树形的结构,线性化为一个数组之类的"串"的结构。2.2、DFS深度优先遍历示例二叉树原型图:2.2.1、前序遍历前序遍历执行顺序:根节点--对左子树做前序遍历--对右子树做前序遍历总的顺序:根节点--左子树--右子树左子树中:根-左-右根节点右子树中:根-左-右对A的左子树做前序遍历A的左子树的根节点是B对B的左子树做前序遍历对B的右子树做前序遍历对E的左子树前序遍历至此,A的左子树做完了前序遍历:然后,对A的右子树做前序遍历:至此,二叉树的前序遍历完成。我们会发现
1、二叉树的递归递归:2、二叉树遍历之DFS深度优先遍历2.1、遍历的概念每个节点都要恰好被访问一次,本质上是二叉树的线性化。一个树形的结构,线性化为一个数组之类的"串"的结构。2.2、DFS深度优先遍历示例二叉树原型图:2.2.1、前序遍历前序遍历执行顺序:根节点--对左子树做前序遍历--对右子树做前序遍历总的顺序:根节点--左子树--右子树左子树中:根-左-右根节点右子树中:根-左-右对A的左子树做前序遍历A的左子树的根节点是B对B的左子树做前序遍历对B的右子树做前序遍历对E的左子树前序遍历至此,A的左子树做完了前序遍历:然后,对A的右子树做前序遍历:至此,二叉树的前序遍历完成。我们会发现
文章目录写在前面动态规划斐波那契1.递归2.自顶向下动规(被动备忘录)3.自底向上动规(主动备忘录)4.进一步优化(空间优化)二项式系数1.递归2.自顶向下动规(被动备忘录)3.自底向上动规(主动备忘录)4.进一步优化(空间优化)树的最大独立集1.问题定义2.递归关系①3.递归关系②最长递增子序列-(作业)1.难以建立递归关系的两个解决方案2.增加约束自底向上动规3.增加子问题参数自底向上动规4.对第一种思路进一步加约束优化编辑距离1.问题定义3.递归关系2.例子Hischberg'salgorithm最长公共子序列最优二叉搜索树交替拿硬币石子合并背包递归关系乘坐电梯1.问题描述2.思路3.例
文章目录二叉树的链式结构链式结构的遍历二叉树链式存储的实现二叉树节点的创建前序遍历中序遍历后序遍历二叉树元素个数叶节点的个数第k层节点的个数查找元素二叉树销毁二叉树的层序遍历判断是否为完全二叉树二叉树的链式结构二叉树的存储结构有顺序结构和链式结构两种,顺序结构我已经在上篇进行了详细的讲解,地址:数据结构-二叉树的顺序存储与堆(堆排序),本篇我们就主要讲解二叉树的链式存储。二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链和三
文章目录1.二叉树的层序遍历2.二叉树的最近公共祖先3.二叉搜索树与双向链表4.从前序与中序遍历序列构造二叉树1.二叉树的层序遍历二叉树的层序遍历OJ连接主要思路是借助一个队列,将每一层的数据以size统计,当size为0时说明该层数据已经输入完,将这一层的数据传入vector中,再通过push_back传入vector中classSolution{public:stringtree2str(TreeNode*root){if(root==NULL){return"";}strings;//to_string将任意类型转换为字符串s=to_string(root->val);//只有左右子树都
🔥🔥欢迎来到小林的博客!! 🛰️博客主页:✈️小林爱敲代码 🛰️欢迎关注:👍点赞🙌收藏✍️留言 这篇文章给大家带来一些关于二叉树的oj题 每日一句:立身以立学为先,立学以读书为本。目录💖1.二叉树的分层遍历💖2.二叉树的分层遍历(逆)💖3.找2个节点的最近公共祖先💖4.二叉搜索树与双向链表💖5.从前序与中序遍历序列构造二叉树💖6.从中序与后序遍历序列构造二叉树总结🥳:💖1.二叉树的分层遍历题目:解题思路:用一个队列入数据,并且用一个变量leavesSize来记录当前一层的数据个数。然后用数组存储当前这一层的数据。再把这个数组添加到数组中。