随笔分类 -  Leetcode-树

Leetcode练习(Python):树类:第117题:填充每个节点的下一个右侧节点指针 II:给定一个二叉树 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。
摘要:题目: 填充每个节点的下一个右侧节点指针 II:给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置 阅读全文
posted @ 2020-05-25 17:24 桌子哥 阅读(326) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第116题:填充每个节点的下一个右侧节点指针:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。
摘要:题目: 填充每个节点的下一个右侧节点指针:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; 阅读全文
posted @ 2020-05-25 14:06 桌子哥 阅读(405) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第114题:二叉树展开为链表:给定一个二叉树,原地将它展开为一个单链表。
摘要:题目: 二叉树展开为链表:给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 思路: 先使用前序遍历,再按顺序构建一个没有左子树的树。 程序: # Definition for a binar 阅读全文
posted @ 2020-05-25 09:12 桌子哥 阅读(265) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第113题: 路径总和 II:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。
摘要:题目: 路径总和 II:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回: [ [5, 阅读全文
posted @ 2020-05-24 19:57 桌子哥 阅读(634) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:求根到叶子节点数字之和:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。
摘要:题目: 求根到叶子节点数字之和:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径 1->2->3 代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 思路: 深度优先。 程序: 阅读全文
posted @ 2020-05-24 17:00 桌子哥 阅读(529) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第199题:二叉树的右视图:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
摘要:题目: 二叉树的右视图:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 思路: 借助层序遍历来实现。 程序: # Definition for a binary tree node. # class TreeNode: # def __init__(sel 阅读全文
posted @ 2020-05-24 16:40 桌子哥 阅读(760) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第236题:二叉树的最近公共祖先:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
摘要:题目: 二叉树的最近公共祖先:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: 阅读全文
posted @ 2020-05-20 17:13 桌子哥 阅读(285) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第235题:二叉搜索树的最近公共祖先:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
摘要:题目: 二叉搜索树的最近公共祖先:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下 阅读全文
posted @ 2020-05-20 15:31 桌子哥 阅读(273) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第111题:二叉树的最小深度:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
摘要:题目: 二叉树的最小深度:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 思路: 递归求解,但要注意的是测试样例[1,2],因为1不能作为叶子节点所以结果是2,设计程序的时候要规避。 程序: # Definition 阅读全文
posted @ 2020-05-20 11:04 桌子哥 阅读(511) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第110题:平衡二叉树:给定一个二叉树,判断它是否是高度平衡的二叉树。
摘要:题目: 平衡二叉树:给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 思路: 递归思路。 程序: # Definition for a binary tree node. # class TreeNode 阅读全文
posted @ 2020-05-20 10:11 桌子哥 阅读(453) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第112题:路径总和:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。
摘要:题目: 路径总和:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 t 阅读全文
posted @ 2020-05-19 12:42 桌子哥 阅读(837) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第226题:翻转二叉树:翻转一棵二叉树。
摘要:题目: 翻转二叉树:翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法 阅读全文
posted @ 2020-05-19 10:32 桌子哥 阅读(216) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第108题:将有序数组转换为二叉搜索树:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
摘要:题目: 将有序数组转换为二叉搜索树:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 思路: 因为输入是递增的数组,为了转换成二叉搜索树,因此需要找到整个树的根节点,之后使用递归来的得到每个子树 阅读全文
posted @ 2020-05-19 10:21 桌子哥 阅读(327) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第104题:二叉树的最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。
摘要:题目: 二叉树的最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 思路: 借助层序遍历来做,有多少层树就有多深。 程序: # Definition for a binary tree node. # clas 阅读全文
posted @ 2020-05-19 10:07 桌子哥 阅读(628) 评论(0) 推荐(0) 编辑
Leetcode练习(python):树类:第107题:二叉树的层次遍历 II:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
摘要:题目: 二叉树的层次遍历 II:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 思路: 正常层序遍历结果的逆输出。 程序: # Definition for a binary tree node. # class TreeNode: # 阅读全文
posted @ 2020-05-19 09:57 桌子哥 阅读(531) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第102题:二叉树的层序遍历:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
摘要:题目: 二叉树的层序遍历:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 思路: 层序遍历的常用解题思路。 程序: # Definition for a binary tree node. # class TreeNode: # def __init__ 阅读全文
posted @ 2020-05-19 09:35 桌子哥 阅读(1085) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第101题:对称二叉树:给定一个二叉树,检查它是否是镜像对称的。
摘要:题目: 对称二叉树:给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 思路: 递归大法 阅读全文
posted @ 2020-05-19 09:23 桌子哥 阅读(649) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第100题:相同的树:给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
摘要:题目: 相同的树:给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 思路: 递归秒解,思路也简单。 程序: # Definition for a binary tree node. # class TreeNode: # def _ 阅读全文
posted @ 2020-05-18 20:03 桌子哥 阅读(464) 评论(0) 推荐(0) 编辑
Leetcode练习(Python):树类:第98题:验证二叉搜索树:给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
摘要:题目: 验证二叉搜索树:给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 思路: 遇到树第一想到了递归,用递归来实现。 程序 : # Defin 阅读全文
posted @ 2020-05-18 19:56 桌子哥 阅读(656) 评论(0) 推荐(0) 编辑