找樹左下角的值
本地遞迴偏難,反而迭代簡單屬於模板題, 兩種方法掌握一下
題目連結/文章講解/影片講解:https://programmercarl.com/0513.找樹左下角的值.html
/**
* 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 {number}
*/
var findBottomLeftValue = function(root) {
let result = root.val;
let maxDep = -Infinity;
const traverse = (node, depth) => {
if (node.left === null && node.right === null) {
if (maxDep < depth) {
maxDep = depth;
result = node.val;
}
return;
}
if (node.left) {
traverse(node.left, depth+1);
}
if (node.right) {
traverse(node.right, depth+1);
}
}
traverse(root, 0);
return result
};
路徑總和
本題 又一次設計要回溯的過程,而且回溯的過程隱藏的還挺深,建議先看影片來理解
112. 路徑總和,和 113. 路徑總和ii 一起做了。 優先掌握遞迴法。
題目連結/文章講解/影片講解:https://programmercarl.com/0112.路徑總和.html
這題自己寫出跟題解不一樣的遞迴,總算可以自己寫出來了
function getTotal(node, total, target) {
if (node.left === null && node.right === null) {
total += node.val;
if (total === target) {
return true;
} else {
total -= node.val;
return false;
}
}
total += node.val
if (node.left) {
let flag = getTotal(node.left, total, target);
if (flag) {
return true;
}
}
if (node.right) {
let flag = getTotal(node.right, total, target);
if (flag) {
return true;
}
}
total -= node.val;
return false;
}
/**
* 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} targetSum
* @return {boolean}
*/
var hasPathSum = function(root, targetSum) {
if (root == null) return false;
let total = 0;
let flag = getTotal(root, total, targetSum);
return flag;
};
從中序與後序遍歷序列構造二叉樹
本題算是比較難的二叉樹題目了,大家先看影片來理解。
106.從中序與後序遍歷序列構造二叉樹,105.從前序與中序遍歷序列構造二叉樹 一起做,思路一樣的
題目連結/文章講解/影片講解:https://programmercarl.com/0106.從中序與後序遍歷序列構造二叉樹.html
這題好難,基本沒思路
/**
* 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[]} inorder
* @param {number[]} postorder
* @return {TreeNode}
*/
var buildTree = function(inorder, postorder) {
if (!inorder.length) return null;
let rootVal = postorder.pop();
let index = inorder.indexOf(rootVal);
let root = new TreeNode(rootVal);
root.left = buildTree(inorder.slice(0,index), postorder.slice(0,index));
root.right = buildTree(inorder.slice(index+1), postorder.slice(index,))
return root;
};