654.最大二叉樹
又是構造二叉樹,昨天大家剛剛做完 中序後序確定二叉樹,今天做這個 應該會容易一些, 先看影片,好好體會一下 為什麼構造二叉樹都是 前序遍歷
題目連結/文章講解:https://programmercarl.com/0654.最大二叉樹.html
影片講解:https://www.bilibili.com/video/BV1MG411G7ox
比106.從中序與後序遍歷序列構造二叉樹 簡單點
自己做出來了
/**
* 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 {number[]} nums
* @return {TreeNode}
*/
var constructMaximumBinaryTree = function(nums) {
if (nums.length === 0) return null;
let max = Math.max(...nums);
let index = nums.indexOf(max);
let maxNode = new TreeNode(max);
maxNode.left = constructMaximumBinaryTree(nums.slice(0,index));
maxNode.right = constructMaximumBinaryTree(nums.slice(index+1));
return maxNode;
};
617.合併二叉樹
這次是一起操作兩個二叉樹了, 估計大家也沒一起操作過兩個二叉樹,也不知道該如何一起操作,可以看影片先理解一下。 優先掌握遞迴。
題目連結/文章講解:https://programmercarl.com/0617.合併二叉樹.html
影片講解:https://www.bilibili.com/video/BV1m14y1Y7JK
自己做出來了
/**
* 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} root1
* @param {TreeNode} root2
* @return {TreeNode}
*/
var mergeTrees = function(root1, root2) {
if (root1 === null && root2 === null) return root1;
if (root1 === null) return root2;
if (root2 === null) return root1;
let num1 = root1.val;
let num2 = root2.val;
let total = num1 + num2;
let totalNode = new TreeNode(total);
totalNode.left = mergeTrees(root1.left, root2.left);
totalNode.right = mergeTrees(root1.right, root2.right);
return totalNode;
};
700.二叉搜尋樹中的搜尋
遞迴和迭代 都可以掌握以下,因為本題比較簡單, 瞭解一下 二叉搜尋樹的特性
題目連結/文章講解: https://programmercarl.com/0700.二叉搜尋樹中的搜尋.html
影片講解:https://www.bilibili.com/video/BV1wG411g7sF
/**
* 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
* @param {number} val
* @return {TreeNode}
*/
var searchBST = function(root, val) {
if (root === null) return null;
if (root.val > val) {
return searchBST(root.left, val);
} else if (root.val <val) {
return searchBST(root.right, val);
} else {
return root;
}
};
98.驗證二叉搜尋樹
遇到 搜尋樹,一定想著中序遍歷,這樣才能利用上特性。
但本題是有陷阱的,可以自己先做一做,然後在看題解,看看自己是不是掉陷阱裡了。這樣理解的更深刻。
題目連結/文章講解:https://programmercarl.com/0098.驗證二叉搜尋樹.html
影片講解:https://www.bilibili.com/video/BV18P411n7Q4
這題有一點坑
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isValidBST = function(root) {
let maxValue =Number.MIN_SAFE_INTEGER;
const inOrder = (node) => {
if (node === null) return true;
let left = inOrder(node.left);
if (!left || maxValue >= node.val) {
return false;
}
maxValue = node.val;
let right = inOrder(node.right);
return left && right;
}
return inOrder(root);
};