![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
思维致胜
weixin_45850278
这个作者很懒,什么都没留下…
展开
-
树(9)求给定的二叉树的前序遍历
Q: 例如: 给定的二叉树为{1,#,2,3}, 返回:[1,2,3] A: 递归太简单了,用迭代。 两个啥区别呢? 递归是自己的子孙不断重复自己的命运,全都一个模子,每一代的起点都是同一个原点; 迭代是后面的每一代每重复新的一轮都有所提升,老一辈的果实,下一代在此基础上发展升级,实现一代比一代强,直到远方的尽头。 思路: 用栈存,从栈取至数组 前序遍历:根、左、右 用到的函数:根作为第一个压栈,自然最后一个出栈,用**pop()**取 循环迭代:函数while(),循环的前提是栈不能为空,左右节点先后原创 2020-08-07 23:33:23 · 221 阅读 · 0 评论 -
树(8)填充所有节点的next指针
Q: 填充所有节点的next指针,指向最接近它的同一层右边节点。如果没有同一层没有右边的节点,则应该将next指针设置为NULL。 初始时,所有的next指针都为NULL A: 每层的指针指向无非两种情况。第一种是根节点的左孩子指向右孩子,还有种情况是根节点的右孩子指向她兄弟的左孩子 判断条件: 第一种情况:根节点没孩子,空 第一种情况:根节点有孩子就左孩子拉右孩子的手 第三种情况:根节点如果不仅有左右孩子还有兄弟呢,那除了让他的左右胞胎拉个手,还要让她的右孩子去拉兄弟的左孩子的手 ...原创 2020-08-06 10:37:03 · 151 阅读 · 0 评论 -
树(7)判断给定的二叉树是否是平衡的
Q: 在这个问题中,定义平衡二叉树为每个节点的左右两个子树高度差的绝对值不超过1的二叉树; A: 判断题为布尔值 思想:模块化很重要,堆一个雪人,先知道怎么堆,得需要头、身体、四肢,然后接着定义头是怎么做,身体怎么做,四肢怎么做 ——由整体到局部 最外层:判断平衡=》绝对值小于1 次外层:如何知道高度 平衡二叉树判断最外层次外层次外层跟随最外层进行递归 最外层 balance() 根节点为null,true; 根节点不为null,不满足平衡条件,false; 满足平衡条件,继续以左右节点为根节点,试探下面原创 2020-08-05 11:29:15 · 100 阅读 · 0 评论 -
树(6)二叉树层序遍历
Q: 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 3 / 9 20 / 15 7 该二叉树层序遍历的结果是 [ [3], [9,20], [15,7] ] A: 原料:大结果集(二维数组=每层的结果集+深度/数组元素下标)、层数(初始化为0)、给定的二叉树,每层的结果集(每层的值) 临界点:给定的为NULL,返回空数组; (使用一个变量level来标记当前的深度,初始化带入0,表示根结点所在的深度。原创 2020-08-04 17:01:09 · 238 阅读 · 1 评论 -
树(5)给定n能构建的二叉搜索树的数量
Q: 给定一个值n,能构建出多少不同的值包含1…n的二叉搜索树(BST)? 例如:给定 n = 3, 有五种不同的二叉搜索树(BST) A: 二叉搜索树定义:左孩子value<根节点value 右孩子value>根节点value 思路:边界n=1+递归 对于任意根节点k,能构建f(k)种树 比k小的k-1个元素构成左子树,能构建f(k-1)种树 同理右子树,f(n-k) 父节点,左节点和右节点已共同构建出一棵完整的最简单的树,表示解题将迈进最后一步。左右子树在各自范围内的随机选择相互独立,故原创 2020-08-03 15:40:33 · 713 阅读 · 0 评论 -
树(4)实现二叉树的中序遍历
Q: 给出的二叉树为{1,#,2,3}, 1 2 / 3 返回[1,3,2]. A: 栈不为空时(第一层循环) node一直进栈,直到node为空. (node = node.left) (第二层循环) 写入node结果,跳出该元素,并循环判断其右节点原创 2020-08-02 12:37:15 · 102 阅读 · 0 评论 -
树(3)构造树
Q: 给出一棵树的前序遍历和中序遍历,请构造这颗二叉树 注意: 可以假设树中不存在重复的节点 A: 建立数组下标,根据数组下标定位元素及左右两边的数组长度 通过前序遍历确定根A0, 通过中序遍历中根A0的位置找到其左右子树A1、 A2(先遍历中序遍历找到根节点的位置) 为了分别定位属于A1、A2左右子树的长度,仅需定义出左/右子树的长度,借长度和上一个前序、中序的首尾点来确定A1,A2各自的前序及中序数组 summay 通过前序找出根节点,通过根节点和中序找出左右子树,进入递归(分别找出左右子树的根节点原创 2020-07-31 11:20:06 · 311 阅读 · 0 评论 -
树(1)给定二叉树的最大深度
Q: 求给定二叉树的最大深度, 最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。 A: 临界条件NULL 思想:递归 空了的深度为0; 不空就max左子树和右子树的深度(左子树和右子树分别作为新的起点,用return),最后加根节点的一个数量 ...原创 2020-07-30 11:53:40 · 130 阅读 · 0 评论 -
树(2)same tree
Q: 给出两个二叉树,请写出一个判断两个二叉树是否相等的函数。 判断两个二叉树相等的条件是:两个二叉树的结构相同,并且相同的节点上具有相同的值。 A: 判断相等:boolean 思想:递归 步骤: 边界条件—>NULL 逻辑表达 +至少一个为空: A&&B—>true A||B—>false +都不为空: 值相等,继续同步判断其左子树和右子树情况是否相等,并集 ...原创 2020-07-29 09:57:02 · 59 阅读 · 0 评论