首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

美团面试官:你对二叉树后续遍历一无所知

手把手刷二叉树第一期 说过二叉树相关题目最核心的思路是明确当前节点需要做的事情是什么。...刚才说了,二叉树相关题目最核心的思路是明确当前节点需要做的事情是什么。 现在我们想计算子树中 BST 的最大和,站在当前节点的视角,需要做什么呢?...根据以上三点,站在当前节点的视角,需要知道以下具体信息: 1、左右子树是否是 BST。 2、左子树的最大值和右子树的最小值。 3、左右子树的节点值之和。...数组,我们暂且称它为res,其中: res[0]记录以root为根的二叉树是否是 BST,若为 1 则说明是 BST,若为 0 则说明不是 BST; res[1]记录以root为根的二叉树所有节点中的最小值...另外,我们要尽可能避免递归函数中调用其他递归函数,如果出现这种情况,大概率是代码实现有瑕疵,可以进行类似本文的优化来避免递归套递归。 学会了吗?有收获的话点个再看好了。

52220

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

return root; } }; 验证二叉搜索树 解题思路: 验证二叉树是否为二叉搜索树(BST),即所有左子树节点值均小于当前节点,所有右子树节点值均大于当前节点。...对于右子节点,设定其值范围为 (当前节点值, max)。 如果所有节点都符合条件,则该树是 BST。...; // 检查左子树是否为有效的二叉搜索树 bool left = isValidBST(root->left); // 当前节点的有效性检查...// 检查右子树是否为有效的二叉搜索树 bool right = isValidBST(root->right); // 只有左子树、右子树都是有效...BST,且当前节点符合条件时,返回true return left && right && ret; } }; 二叉搜索树中第K小的元素 解题思路: 由于 BST 的中序遍历会按从小到大的顺序输出节点值

23210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    原创 | 手把手刷二叉搜索树(第二期)

    ) 主要是利用二叉搜索树「中序遍历有序」的特性来解决了几道题目,本文来实现 BST 的基础操作:判断 BST 的合法性、增、删、查。...其中「删」和「判断合法性」略微复杂。 一、判断 BST 的合法性 这里是有坑的哦,我们按照刚才的思路,每个节点自己要做的事不就是比较自己和左右孩子吗?...,代码值检查了它的左右孩子节点是否符合左小右大的原则;但是根据 BST 的定义,root的整个左子树都要小于root.val,整个右子树都要大于root.val。...max) { // base case if (root == null) return true; // 若 root.val 不符合 max 和 min 的限制,说明不是合法...在 BST 中搜索一个数 如果是在二叉树中寻找元素,可以这样写代码: boolean isInBST(TreeNode root, int target) { if (root == null)

    31530

    Python binarytree库的用法介绍

    一、安装binarytree pip install binarytree 在binarytree库中,可以供我们导入使用的有1个类和5个函数。下面会依次介绍每一个类或函数的用法。...生成的树是随机的,所以每次运行结果不一样。 满二叉树:所有叶节点都在最底层的完全二叉树称为满二叉树。满二叉树是完全二叉树中的特殊情况,除了满足完全二叉树的特征,还满足所有叶节点都在最底层。...is_perfect 表示堆是否为满二叉树,默认为False,如果为True则一定是满二叉树,如果为False则不一定为满二叉树。生成的树是随机的,所以每次运行结果不一样。...两个属性来将节点关联到一棵树中,这相对于批量添加来说,操作有点繁琐。...binarytree 库的源码并不复杂,可供调用的5个函数代码都很少,大部分代码是实现Node类,在Node类中,代码多是因为实现了很多常用的方法,单独看其中一个方法时,代码并不多。

    1.1K40

    二叉树类问题框架

    文章目录 前言 解决方案 应用示例 二叉树最大路径和 前、中序遍历还原二叉树 判断两棵二叉树完全相同 判断BST的合法性 BST 遍历框架 完全二叉树的节点数量 二叉树节点公共祖先问题 前言 花些时间...系列开头先来个最简单的二叉树,使用此框架的前提是:你能把实际问题抽象成为二叉树问题。题目也好,现实问题也罢,都是会有“伪装”的。...---- 前、中序遍历还原二叉树 前序遍历、 //通过前序遍历和中序遍历还原二叉树 TreeNode* rebuild_tree(TreeNode* head, vector vec1...,只有三种可能嘛,要么是一棵满二叉树(图一),要么是一堆满二叉树的结合(图二),要么是两个节点的斜树加上一堆的满二叉树结合(图三)。...情况二本来是可以用两个节点来判断的,但是递交之后,只有一个节点是有值的,另一个节点注定是空。那就和情况三一样了。 所以情况三的处理间接也就是帮情况二在善后了。

    20220

    六大类二叉树面试题汇总解答

    1.1 判断一棵二叉树是否是二叉搜索树(BST) 题:给定一棵二叉树,判断该二叉树是否是二叉搜索树。...(代码中的 bstMax 和 bstMin 函数功能分别是返回二叉树中的最大值和最小值结点,这里假定二叉树为二叉搜索树,实际返回的不一定是最大值和最小值结点) int isBSTUnefficient...还可以模拟树的中序遍历来判断BST,可以直接将中序遍历的结果存到一个辅助数组,然后判断数组是否有序即可判断是否是BST。...解1:自顶向下解法 最自然的解法是以根结点开始遍历二叉树所有的结点,判定以当前结点为根的子树是否是BST,如果是,则该结点为根的BST就是最大的BST。...代码中需要注意的是每次调用 sortedList2BST 函数时,list 位置都会变化,调用完函数后 list 总是指向 mid+1 的位置 (如果满足返回条件,则 list 位置不变)。

    22710

    DFS基础问题-LeetCode 98、101(二叉树中序遍历,层次遍历)

    作者:TeddyZhang,公众号:算法工程师之路 DFS基础问题:LeetCode #98 #101 1 编程题 【LeetCode #98】验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树...解题思路: 如何判断一棵二叉树是否为BST,很简单的思路就是:对这棵二叉树进行中序遍历,然后判断其中序遍历后的序列是不是单调递增的序列,如果是,则为一棵BST,否则不是。...但是二叉树的中序遍历有两个版本,递归版和非递归版本,我们先来看递归版本,其实际就是一个dfs算法,从根节点依次向下深入,在递归体内我们需要设置两个变量min, max来进行数值边界的判断,以使得遍历后的序列为一个单调增序列..., INT64_MAX); } }; 我们还可以使用一个堆栈来实现二叉树的费递归版的中序遍历!!!...给定一个二叉树,检查它是否是镜像对称的。

    79320

    二叉树入门和刷题看这篇就够了!

    什么是二叉树?官方是这样定义的:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。...如果不理解,下面我们详细说明: 事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。...BST是二叉搜索树,很重要。BST是二叉搜索树,很重要。重要的事情说三遍。 第98题:给定一个二叉树,判断其是否是一个有效的二叉搜索树。...如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。(二叉树的度代表某个结点的孩子或者说直接后继的个数,这个在上面已经说过了。...如果无效节点的依赖的节点还有效,那么不应该删除,如果无效节点和它的子节点都无效,则可以删除。剪掉这些节点的过程,称为剪枝,目的是用来处理二叉树模型中的依赖问题。

    56830

    【算法】论平衡二叉树(AVL)的正确种植方法

    二叉搜索树查找的原理和二分查找类似,就是借助于它本身的结构,在遍历查找的过程中跳过一些不必要的结点的比较,从而实现高效的查找。 BST的其他API也是借助了这一优势实现性能的飞跃。...通过这种方式, 不断地使得二叉树的形状和构造维持着一个“平衡”的状态, 添加了这种维护机制的二叉搜索树, 就是平衡二叉树 上个图,对比一下普通的二叉搜索树和平衡二叉树的区别: 普通的二叉搜索树(BST)...这里我们可以很明显地看到平衡二叉树的优势所在: 使得查找的平均深度降低, 优化各个API的性能开销 AVL和普通BST区别在于动态方法 平衡二叉树和普通二叉查找树区别主要在于动态方法!...(get,min,max,floor,ceiling, rank,select) 所以本文编写的主要API就只有两个: put和delete 平衡二叉树的监督机制 我们前面提到了平衡二叉树有它的监督机制...上面我们说到, 在动态操作(插入/删除)的过程中,我们需要平衡因子作为“指标”, 去监督当前这颗二叉树的构造是否符合预期, 即——是否是一颗平衡二叉树。

    85620

    【算法】论平衡二叉树(AVL)的正确种植方法

    二叉搜索树查找的原理和二分查找类似,就是借助于它本身的结构,在遍历查找的过程中跳过一些不必要的结点的比较,从而实现高效的查找。 BST的其他API也是借助了这一优势实现性能的飞跃。...通过这种方式, 不断地使得二叉树的形状和构造维持着一个“平衡”的状态, 添加了这种维护机制的二叉搜索树, 就是平衡二叉树 上个图,对比一下普通的二叉搜索树和平衡二叉树的区别: 普通的二叉搜索树(BST)...这里我们可以很明显地看到平衡二叉树的优势所在: 使得查找的平均深度降低, 优化各个API的性能开销 AVL和普通BST区别在于动态方法 平衡二叉树和普通二叉查找树区别主要在于动态方法!...(get,min,max,floor,ceiling, rank,select) 所以本文编写的主要API就只有两个: put和delete 平衡二叉树的监督机制 我们前面提到了平衡二叉树有它的监督机制...上面我们说到, 在动态操作(插入/删除)的过程中,我们需要平衡因子作为“指标”, 去监督当前这颗二叉树的构造是否符合预期, 即——是否是一颗平衡二叉树。

    1K110

    数据结构题目总结(C 语言描述)

    (T, L[i]); } 带头结点的单链表中,所有节点值递增排序,编写函数。...删除表 L 中所有其值大于等于 min 小于等于max 的结点 void rangeDelete(LinkList & L, ElemType min, ElemType max){ // q...因此,对给定的二叉树进行中序遍历,如果始终能保持前一个值比后一个值小,则说明该二叉树是一棵二叉排序树 KeyType predt = -32767; // predt 为全局变量。...删除表中有值相同的多余元素并释放空间 TODO *算法判别给定表达式中开括号是否配对出现 TODO *给定二叉树 T 设计算法复制二叉树 T TODO *给图 G = (V, E) 和 G 中两个顶点...与 T2 是否相同(二叉树) TODO 2018 年 *计算两个多项式乘积(给定 La、Lb 两个带头结点单链表表示的多项式) TODO *给定二叉树,以先序形式输出所有结点的值和结点所在层次 TODO

    3.2K30

    深入了解二叉搜索树:原理、操作与应用

    二叉搜索树 形如上图的二叉树就是二叉搜索树,接下来我们来具体阐述一下什么是二叉搜索树。...,而且可能二叉树中还有重复值的节点,但是对于二叉搜索树就没有这种麻烦,当我们要搜索一个数时,只需要将这个数和根节点的值进行比较,如果比根节点的数大就递归到右边,如果比根节点的数小就递归左边,不需要整个树都递归...INT_MAX; } //找到最小值的节点 TreeNode* min = AssistGetMin(_root); //返回最小值 return min->_val; } TreeNode*...,这里我们就用找最小值的函数,对于删除的当前节点的左节点和右节点都不为空的时候,我们需要有一个节点来重新构造一下这个二叉搜索树,这里有个技巧,就是我们需要的节点就是当前节点的左子树的最大值的节点或者是右子树的最小值的节点充当本节点...最后,二叉搜索树是计算机科学中的基础之一,深入了解它将有助于我们更好地理解和应用数据结构与算法,提高编程能力,并解决更复杂的计算问题。

    12410

    二、进阶数据结构

    (maxDiameter, myDiameter); return 1 + Math.max(leftMax, rightMax);}4、层序遍历5、进阶题解669 修剪二叉搜索树124 二叉树中的最大路径和...2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。...是否是bst、当前二叉树最大值、当前二叉树最小值、当前二叉树和 if (null == root) return new int[]{1, Integer.MIN_VALUE, Integer.MAX_VALUE...bst、当前二叉树最大值、当前二叉树最小值、当前二叉树和 int[] res = new int[4]; //判断是否是合法的BST:左子树是 右子树是 并且root值大于左子树最大值...i 的颜色判断是否是二分图 if (color[e] == color[i]) { // 若相同,则此图不是二分图

    16210

    Validate Binary Search Tree( 递归,BST )

    题意:判断一个二叉树是否为 二叉搜索树BST 题解:所有思路都是去找二叉树中不满足BST性质的节点,找到了,就不符合,找不到就符合。那么怎么去找呢?我提供两种思想。...第一个是,BST的中序遍历是一个有序数组,所以把BST 中序遍历的结果拿出来,看看是不是有序的就可以了。很简单。那如果不让你用额外的空间呢?那就在中序遍历的过程中,判断是不是有序。...我们维护一个值last,这个值是遍历数组的前一个元素,如果发现有当前元素小于前一个元素,就是false 第二个思路是,判断每个节点是否符合区间。这种方法随便哪种遍历都可以。...根节点的区间,是没有限制的,Int.Min ~ Int.Max。...=NULL&&root->val>min->val)||(min==NULL)) &&( (max!

    49620

    《javascript数据结构和算法》读书笔记(6):树

    整个世系表中,他的高度为12。 二叉树 二叉树最多只能有·2个子节点。 ? 如:B为A的左侧子节点。E为A的右侧子节点。 二叉搜索树(BST)是一种特殊的节点。左侧子节点存放比父节点小的值。...同时,还可以用对象来实现这个二叉树, 实现以下功能: insert(key):在树中插入一个新键 search(key):在树中查找一个键,存在则返回true,否则为false inOderTraverse...,preOderTraverse,postOderTraverse:中序/先序/后序遍历所有节点 min/max:返回树中最小/最大的键值 remove:从树中移除某个键。...中序遍历:从最小到最大 中序遍历的顺序是“从最小到最大”。 ? 每次递归前,应检查传入的节点是否为null。这是递归停止的条件。 调用相同的函数访问左侧子节点。直到找到最小的。...如果是在判断后执行,会是什么结果呢?

    62610

    数据结构:一文看懂二叉搜索树 (JavaScript)

    猫咪宠物商店价目表优惠活动公众号推送首图@凡科快图.png 二叉搜索树介绍 二叉搜索树是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点: 若其左子树存在,则其左子树中每个节点的值都不大于该节点值...用队列来存储当前层的节点数,遍历当前层的节点,将当前层的节点依次推入数组subRes[],再将当前节点的左右子节点推入队列中,进入下一层进行遍历,直到遍历完整棵树,即完成到二叉树的层序遍历。...二叉树的层序遍历 3 二叉树搜索 在 JavaScript 中我们可以通过 hasOwnProperty 来检测指定 key 在对象是否存在,现在我们在二叉搜索中实现一个类似的方法,传入一个值 value...判断是否在二叉搜索树中存在 。...console.log(BST.max()) console.log(BST.min()) console.log(BST.preOrderTraverse(key => console.log(key

    49420

    判断是不是一棵二叉搜索树!

    接下来仔细体验一波 98.验证二叉搜索树 题目地址:https://leetcode-cn.com/problems/validate-binary-search-tree/ 给定一个二叉树,判断其是否是一个有效的二叉搜索树...我们把二叉树转变为数组来判断,是最直观的,但其实不用转变成数组,可以在递归遍历的过程中直接判断是否有序。...了解这些陷阱之后我们来看一下代码应该怎么写: 递归三部曲: 确定递归函数,返回值以及参数 要定义一个longlong的全局变量,用来比较遍历的节点是否有序,因为后台测试数据中有int最小值,所以定义为longlong...注意递归函数要有bool类型的返回值, 我们在二叉树:递归函数究竟什么时候需要返回值,什么时候不要返回值? 中讲了,只有寻找某一条边(或者一个节点)的时候,递归函数会有bool类型的返回值。...迭代法 可以用迭代法模拟二叉树中序遍历,对前中后序迭代法生疏的同学可以看这两篇二叉树:听说递归能做的,栈也能做!

    44110

    Js算法与数据结构拾萃(4):二叉树

    •中序遍历•后序遍历•二叉树的一些迭代特性•判断是否二叉搜索树•二叉搜索树的最近公共祖先•二叉树的最近公共祖先 补白 准备阅读: •《javascript数据结构和算法》读书笔记(6):树[1]• 自平衡树...树的逻辑是和链表高度相似的。本文中树指的是二叉树,而二叉树还有二叉搜索树(BST),红黑树,“B树”(B Tree)等。同时需要掌握的还有遍历方法(前序遍历,中序遍历,后序遍历)等。...给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 题解:递归判断 这种题还是比较简单,注意测试用例可能包含null的情况。...再补白部分的文章中,专门证明了:对于BST,中序遍历的结果是递增的。 也就是说你把中序遍历的过程做多一个判断,就可以得出结果。...和案例6唯一的不同在于,此题不限定BST。所以不能用BST的特性取巧了。 题解:递归 思路是很明确的,写一个查询方法search来判断两个树是否存在包含关系。

    63941
    领券