算法之二叉树的剪枝
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。 返回移除了所有不包含 1 的子树的原二叉树。 ( 节点 X 的子树为 X 本身,以及所有 X 的后代。) 解法: 1.递归 思路: 首先看以下什么情况会移除这个节点,两个条件都必须满足 1. 这个节点为...
331 字
|
2 分钟
算法之重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 解法: 1.递归 思路: 递归,六句代码包含着大智慧。 首先我们要明白前序遍历和中序遍历的节点遍历顺序。 前序遍历:根-左-右 中序遍历:左-根-右 结合题目的数组我们可以得到...
308 字
|
2 分钟
算法之验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: - 节点的左子树只包含小于当前节点的数。 - 节点的右子树只包含大于当前节点的数。 - 所有左子树和右子树自身必须也是二叉搜索树。 解法: 1.递归 思路: 根据二叉搜索树的特性: 中序遍历的...
337 字
|
2 分钟
算法之二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 解法: 1.DFS递归 思路: 既然是求二叉树中直径长度是任意两个节点中的最大路径值 那我们直接求每个节点的左子树和右子树深度,然后一个个节点进行左右...
231 字
|
1 分钟
算法之删除二叉树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 1. 首先找到需要删除的节点; 2. 如果找到了,删除它. 说明: 要求算法时间复杂度...
667 字
|
3 分钟
算法之修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。 所以结果应当返回修剪好的二...
371 字
|
2 分钟
算法之二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = ...
628 字
|
3 分钟
算法之二叉搜素树范围和
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。 解法 1.递归深度优先搜索 按深度优先搜索的顺序计算范围和。记当前子树根节点为 root, 分4种情况讨论 1. root节点为空,返回0 2. root.val值大于high的值...
371 字
|
2 分钟