我开了一个LeetCode会员,选择了一些高频率题目。这个系列是希望帮助大家每天花30分钟的题目了解面试高频题,让大家面试更加游刃有余。

本期我们讲解两道的中等题。我们之前几期的推送一直在强调递归和迭代,之前讲解的题目递归都比迭代简单,那么本期首先带来的就是迭代比递归更容易的题目。本期所用的树的数据结构均如下:

class 

114. 二叉树展开为链表

题意:给定一棵树,根据前序遍历将其展开为一个【只有右子树有值的,左子树为null的】类似于链表的结构,如下图

拿上图给出的例题作分析,我们发现4这个结点的右子树结点应该是5,但是怎么去找到5呢?是不是要把5先存起来,然后4才能找到5。那我们第一反应就是用一个数据结构去存储结点。那这就是迭代的思路,数据结构就先从队列和栈考虑,一般来讲,广搜用队列,深搜用栈,这里的前序遍历显然是深搜,那么我们用栈。因为前序遍历的顺序是根节点->左->右,所以我们先把右子树结点入栈,再把左子树结点入栈,然后依次操作。

迭代比递归好的一点,就是能根据代码很好的演算,如果大家还没有搞懂上面的思路,就根据下面的代码演算一遍吧。

public 

那么这可以用递归做吗?答案是肯定的,递归的好处是代码简练、可读性高,但是比较难想、比较难演算,完整代码如下:

private 

看上去是不是很简单,只要几行就搞定了。我一直觉得递归的逻辑很难想,除非是那种一眼就知道的。那其实一眼就知道的题目也是归功于自己练习的多,所以想完全熟悉递归的题目,那就多做吧!上面的代码其实是先找了最右边的一个结点,然后反向往前操作。

我们做了那么多关于树的递归题目,其实无非就是两点:1.先递归左子树还是先递归右子树;2.逻辑放在递归前还是逻辑放在递归后。我们之后会出一个总结专题来好好讲讲树的递归。

95. 最大二叉树

题意: 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 1.二叉树的根是数组中的最大元素。 2.左子树是通过数组中最大值左边部分构造出的最大二叉树。 3.右子树是通过数组中最大值右边部分构造出的最大二叉树。 4.通过给定的数组构建最大二叉树,并且输出这个树的根节点。

这道题其实是一道简单版的构造一棵“二叉搜索树”,只是这的“二叉搜索树”被题中规定的“最大树”替换了。这道题的递归方法是比较简单的,代码如下:

public 

这道题有难度的是迭代方法,我们说迭代方法一定是要有定义一个用于存储结点的数据结构的,那么这道题的数据结构应该是什么?从栈和队列里考虑,这道题是深搜,应该是栈。但我们尝试用栈做下去之后发现,需要用到一个特殊的栈——双向队列,这是一种具有队列和栈的性质的数据结构。迭代的另一个难点是入栈(队列)和出栈(队列)的顺序和时机,我们来看代码:

public 

注意这道题用双向队列的唯一原因就是最后一个return,主要逻辑和栈一样,所以我们说这道题的思路是先选择栈,最后再替换成双向队列。

关注公众号,更多算法知识点告诉你。

找二叉树中给定元素的的左孩子结点_LeetCode高频题:二叉树(五)相关推荐

  1. 找二叉树中给定元素的的左孩子结点_binary_search_tree 二叉树

    二叉树 二叉树概念 二叉树(Binary Search tree)是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树形式,即使是 一般的树也能简单地转换为二叉树,而且二叉树的存储结构 ...

  2. 找二叉树中给定元素的的左孩子结点_二叉树的实现和操作

    0.定义: 二叉树,是每个节点最多只有两个分之的树结构,通常分之被称作"左子树"或者"右子树":二叉树的分之具有左右次序,且不能随意颠倒. 1.特性 在二叉树的 ...

  3. LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)

    1. 题目 给出一个满足下述规则的二叉树: root.val == 0 如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.va ...

  4. 叶子结点和分支节点_二叉树中的度是什么意思,叶子结点是什么?

    展开全部 度分为三32313133353236313431303231363533e4b893e5b19e31333431366366种:树的深度:树中最大的结点层.结点的度:结点子树的个数.树的度: ...

  5. 设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m0)个叶子结点,那么该二叉树上的结点总数为( )。

    设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树.假如一棵这样的二叉树中有m(m>0)个叶子结点,那么该二叉树上的结点总数为( ). 正确答案: B   你的答案: B (正确) ...

  6. javascript --- 从数组中,找出比给定元素大一丁点的元素

    目标如下: 从数组[1,3,2,4,5,6,7]中找到比第1个位置大一丁点的元素 function _findIndex(arr, j){let k = -1;let key = arr[j];for ...

  7. python 数组组合_python-查找数组中某些元素的所有组合

    一种方法是使用掩码以ls中的值填充数组的无效条目,其次数是ls的排列次数. 但是,通过将这些置换的长度设置为arr中无效条目的数量,可以使此操作更加可靠.这样,我们还要考虑len(ls)> (x ...

  8. 【LeetCode 剑指offer刷题】树题19:8 二叉树中序遍历的下一个结点

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 8 二叉树中序遍历的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注 ...

  9. 在Python中给定包含该项目的列表的情况下查找项目的索引

    对于列表["foo", "bar", "baz"]和列表"bar" ,如何在Python中获取其索引(1)? #1楼 a ...

最新文章

  1. CNN----卷积为何能提取图像特征
  2. maven 工程依赖war包
  3. Revenue Cloud答疑
  4. python 微服务框架_Python微服务架构chili_chicken
  5. 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
  6. 深度置信网络JAVA代码,DeeBNetV2.2 深度置信网络源码,有配合的文档可以参考,详见内容 matlab 247万源代码下载- www.pudn.com...
  7. visio导出图片模糊的解决方案
  8. 数据库文档自动生成工具
  9. JAVA实现无损word转pdf文件完整代码教程
  10. 神经网络正向传播步骤和反向传播
  11. 做PPT设计时,需优先设置好哪些功能
  12. 顺丰官网代码(自编)
  13. 照片变古装软件叫什么?好用的古装app拍照软件分享
  14. 机器学习强基计划3-4:详解核方法——以核支持向量机KSVM为例
  15. 为了让机器能和人更好的聊天, Google 都做了什么?
  16. 第七届蓝桥杯省赛——6凑算式(套全排列公式)
  17. M3U8合并最简单的方法
  18. 省级面板数据(2000-2019)一:行政区划+单位法人数(stata版)
  19. easyui-tree 修改图标
  20. quartz-schedule SimpleScheduleBuilder

热门文章

  1. wxWidgets:wxAboutDialogInfo类用法
  2. boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用
  3. boost::detail::sp_convertible相关的测试程序
  4. boost::regex模块基于 ftp 的 regex_match 示例
  5. boost::generate相关的测试程序
  6. boost::mpl::distance相关的测试程序
  7. boost::icl::split_interval_set用法的测试程序
  8. boost::function_types::is_function_pointer用法的测试程序
  9. boost::coroutine2模块实现斐波那契数列的测试程序
  10. boost::core实现交换std::type_info