找二叉树中给定元素的的左孩子结点_LeetCode高频题:二叉树(五)
我开了一个LeetCode会员,选择了一些高频率题目。这个系列是希望帮助大家每天花30分钟的题目了解面试高频题,让大家面试更加游刃有余。
本期我们讲解两道树的中等题。我们之前几期的推送一直在强调递归和迭代,之前讲解的题目递归都比迭代简单,那么本期首先带来的就是迭代比递归更容易的题目。本期所用的树的数据结构均如下:
class
114. 二叉树展开为链表
题意:给定一棵树,根据前序遍历将其展开为一个【只有右子树有值的,左子树为null的】类似于链表的结构,如下图
拿上图给出的例题作分析,我们发现4这个结点的右子树结点应该是5,但是怎么去找到5呢?是不是要把5先存起来,然后4才能找到5。那我们第一反应就是用一个数据结构去存储结点。那这就是迭代的思路,数据结构就先从队列和栈考虑,一般来讲,广搜用队列,深搜用栈,这里的前序遍历显然是深搜,那么我们用栈。因为前序遍历的顺序是根节点->左->右,所以我们先把右子树结点入栈,再把左子树结点入栈,然后依次操作。
迭代比递归好的一点,就是能根据代码很好的演算,如果大家还没有搞懂上面的思路,就根据下面的代码演算一遍吧。
public
那么这可以用递归做吗?答案是肯定的,递归的好处是代码简练、可读性高,但是比较难想、比较难演算,完整代码如下:
private
看上去是不是很简单,只要几行就搞定了。我一直觉得递归的逻辑很难想,除非是那种一眼就知道的。那其实一眼就知道的题目也是归功于自己练习的多,所以想完全熟悉递归的题目,那就多做吧!上面的代码其实是先找了最右边的一个结点,然后反向往前操作。
我们做了那么多关于树的递归题目,其实无非就是两点:1.先递归左子树还是先递归右子树;2.逻辑放在递归前还是逻辑放在递归后。我们之后会出一个总结专题来好好讲讲树的递归。
95. 最大二叉树
题意: 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 1.二叉树的根是数组中的最大元素。 2.左子树是通过数组中最大值左边部分构造出的最大二叉树。 3.右子树是通过数组中最大值右边部分构造出的最大二叉树。 4.通过给定的数组构建最大二叉树,并且输出这个树的根节点。
这道题其实是一道简单版的构造一棵“二叉搜索树”,只是这的“二叉搜索树”被题中规定的“最大树”替换了。这道题的递归方法是比较简单的,代码如下:
public
这道题有难度的是迭代方法,我们说迭代方法一定是要有定义一个用于存储结点的数据结构的,那么这道题的数据结构应该是什么?从栈和队列里考虑,这道题是深搜,应该是栈。但我们尝试用栈做下去之后发现,需要用到一个特殊的栈——双向队列,这是一种具有队列和栈的性质的数据结构。迭代的另一个难点是入栈(队列)和出栈(队列)的顺序和时机,我们来看代码:
public
注意这道题用双向队列的唯一原因就是最后一个return,主要逻辑和栈一样,所以我们说这道题的思路是先选择栈,最后再替换成双向队列。
关注公众号,更多算法知识点告诉你。
找二叉树中给定元素的的左孩子结点_LeetCode高频题:二叉树(五)相关推荐
- 找二叉树中给定元素的的左孩子结点_binary_search_tree 二叉树
二叉树 二叉树概念 二叉树(Binary Search tree)是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树形式,即使是 一般的树也能简单地转换为二叉树,而且二叉树的存储结构 ...
- 找二叉树中给定元素的的左孩子结点_二叉树的实现和操作
0.定义: 二叉树,是每个节点最多只有两个分之的树结构,通常分之被称作"左子树"或者"右子树":二叉树的分之具有左右次序,且不能随意颠倒. 1.特性 在二叉树的 ...
- LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)
1. 题目 给出一个满足下述规则的二叉树: root.val == 0 如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.va ...
- 叶子结点和分支节点_二叉树中的度是什么意思,叶子结点是什么?
展开全部 度分为三32313133353236313431303231363533e4b893e5b19e31333431366366种:树的深度:树中最大的结点层.结点的度:结点子树的个数.树的度: ...
- 设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m0)个叶子结点,那么该二叉树上的结点总数为( )。
设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树.假如一棵这样的二叉树中有m(m>0)个叶子结点,那么该二叉树上的结点总数为( ). 正确答案: B 你的答案: B (正确) ...
- javascript --- 从数组中,找出比给定元素大一丁点的元素
目标如下: 从数组[1,3,2,4,5,6,7]中找到比第1个位置大一丁点的元素 function _findIndex(arr, j){let k = -1;let key = arr[j];for ...
- python 数组组合_python-查找数组中某些元素的所有组合
一种方法是使用掩码以ls中的值填充数组的无效条目,其次数是ls的排列次数. 但是,通过将这些置换的长度设置为arr中无效条目的数量,可以使此操作更加可靠.这样,我们还要考虑len(ls)> (x ...
- 【LeetCode 剑指offer刷题】树题19:8 二叉树中序遍历的下一个结点
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 8 二叉树中序遍历的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注 ...
- 在Python中给定包含该项目的列表的情况下查找项目的索引
对于列表["foo", "bar", "baz"]和列表"bar" ,如何在Python中获取其索引(1)? #1楼 a ...
最新文章
- CNN----卷积为何能提取图像特征
- maven 工程依赖war包
- Revenue Cloud答疑
- python 微服务框架_Python微服务架构chili_chicken
- 微课|《Python编程基础与案例集锦(中学版)》第3章(1)
- 深度置信网络JAVA代码,DeeBNetV2.2 深度置信网络源码,有配合的文档可以参考,详见内容 matlab 247万源代码下载- www.pudn.com...
- visio导出图片模糊的解决方案
- 数据库文档自动生成工具
- JAVA实现无损word转pdf文件完整代码教程
- 神经网络正向传播步骤和反向传播
- 做PPT设计时,需优先设置好哪些功能
- 顺丰官网代码(自编)
- 照片变古装软件叫什么?好用的古装app拍照软件分享
- 机器学习强基计划3-4:详解核方法——以核支持向量机KSVM为例
- 为了让机器能和人更好的聊天, Google 都做了什么?
- 第七届蓝桥杯省赛——6凑算式(套全排列公式)
- M3U8合并最简单的方法
- 省级面板数据(2000-2019)一:行政区划+单位法人数(stata版)
- easyui-tree 修改图标
- quartz-schedule SimpleScheduleBuilder
热门文章
- wxWidgets:wxAboutDialogInfo类用法
- boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用
- boost::detail::sp_convertible相关的测试程序
- boost::regex模块基于 ftp 的 regex_match 示例
- boost::generate相关的测试程序
- boost::mpl::distance相关的测试程序
- boost::icl::split_interval_set用法的测试程序
- boost::function_types::is_function_pointer用法的测试程序
- boost::coroutine2模块实现斐波那契数列的测试程序
- boost::core实现交换std::type_info