LeetCode 专题灵神算法
二叉树与递归 - 灵活运用
视频精讲:二叉树与递归 - 灵活运用
| 题目 | 代码 | 备注 |
|---|---|---|
| 100. 相同的树 | 代码 | |
| 101. 对称二叉树 | 代码 | |
| 110. 平衡二叉树 | 代码 | |
| 199. 二叉树的右视图 | 代码 | |
| 226. 翻转二叉树 | 代码 | *课后作业 |
| 617. 合并二叉树 | 代码 | *课后作业 |
| 1026. 节点与其祖先之间的最大差值 | 代码 | *课后作业 |
| 1080. 根到叶路径上的不足节点 | 代码 | *课后作业 |
题意与示例
100. 相同的树
题目链接:判断两棵二叉树的结构和对应节点值是否完全相同。
示例:输入
p = [1,2,3], q = [1,2,3],输出true。
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
// 就是一个一错全错,全不错才对的思路
if (!p && !q) return true
// 递归出口,这里不要因为惯性写false
if (!p || !q) return false // 其中有一个空节点,当然是不一致,那就是false,那还需要判断一致
// 1. 判断当前节点
// 值不同:一错全错,直接返回 false
// 值相同:还要继续检查子树
if (p.val !== q.val) return false;
// 2. 深搜,一个一个比较
return isSameTree(p.left, q.left) && isSameTree(p.right,q.right)
// 一边不对那就全部不对
// 那边都对那就相当于子树相同
};101. 对称二叉树
题目链接:判断一棵二叉树是否关于根节点左右镜像对称。
示例:输入
root = [1,2,2,3,4,4,3],输出true。
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
// 传入了一个root,那无法比较,需要自己构造一个比较同层左右的函数
let isMirror = function(left, right) {
// 两边都为空,那是对称的
if( !left && !right ) return true
// 如果有一边为空,那也是不对称
if( !left || !right ) return false
// 如果左右(第一层)不相同,那就不对称
if( left.val != right.val ) return false
// 同层val相同就是true
// if(left.val === right.val) return true
// 成功的true从底层传上去
// 思考叶子节点,叶子节点下面传一个true上来
// 假设两边子树都是中心对称的,那就需要判断左子树的左边是否等于右子树的右边
return (
isMirror(left.left, right.right) &&
isMirror(left.right, right.left)
)
}
return isMirror(root.left,root.right)
};110. 平衡二叉树
题目链接:判断每个节点的左右子树高度差是否都不超过 1。
示例:输入
root = [3,9,20,null,null,15,7],输出true。
199. 二叉树的右视图
题目链接:返回从二叉树右侧观察时由上到下能看到的节点值。
示例:输入
root = [1,2,3,null,5,null,4],输出[1,3,4]。
226. 翻转二叉树
题目链接:交换每个节点的左右子树,得到原二叉树的镜像。
示例:输入
root = [4,2,7,1,3,6,9],输出[4,7,2,9,6,3,1]。
617. 合并二叉树
题目链接:叠加两棵二叉树,重叠节点值相加,未重叠节点直接保留。
示例:输入
root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7],输出[3,4,5,5,4,null,7]。
1026. 节点与其祖先之间的最大差值
题目链接:求所有祖先与后代节点值之差的绝对值中的最大值。
示例:输入
root = [8,3,10,1,6,null,14,null,null,4,7,13],输出7。
1080. 根到叶路径上的不足节点
题目链接:删除所有不在任何路径和至少为 limit 的根到叶路径上的节点。
示例:输入
root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1,输出[1,2,3,4,null,null,7,8,9,null,14]。
评论