这是练习二叉树部分第四天的内容
10.平衡二叉树
题目链接:. - 力扣(LeetCode)
思路:用递归明确三要素1)参数值为当前节点 2)递归的终止条件为a.当前节点为空则返回null b.如果左右子树之差大于1,则返回-1,如果返回值是-1,则终止递归 3)单层递归的逻辑:分别求出左右子树的高度,如果>1则返回-1,如果<1则返回当前最大高度;
代码实现如下
var isBalanced = function (root) {
const getHeight = (node) => {
if (!node) return 0;
let leftHeight = getHeight(node.left);
if(leftHeight === -1) return -1
let rightHeight = getHeight(node.right);
if(rightHeight === -1) return -1
if (Math.abs(leftHeight - rightHeight) > 1) {
return -1;
}
return 1 + Math.max(leftHeight, rightHeight);
};
return getHeight(root) === -1 ? false : true;
};
257. 二叉树的所有路径
题目链接:力扣题目链接
思路:依旧还是用递归,这道题涉及了回溯,在代码中体现:
var binaryTreePaths = function (root) {
let res = [];
const getPath = (node, curPath) => {
// 递归的终止条件,如果当前节点没有左右子节点,那么说明他是叶子节点
if (!node.left && !node.right) {
curPath = curPath + node.val;
res.push(curPath);
return;
}
// 确认单层逻辑
curPath = curPath + node.val + "->";
node.left && getPath(node.left, curPath);
// 将之前的curPath传入,是一个回溯的过程
node.right && getPath(node.right, curPath);
};
getPath(root, '')
return res;
};
404.左叶子之和
题目链接:. - 力扣(LeetCode)
思路:还是用递归去解决,这里要注意终止条件是node为空的时候
var sumOfLeftLeaves = function (root) {
let sum = 0;
const getSum = (node) => {
if (!node) return;
if (node.left && !node.left.left && !node.left.right) {
sum = sum + node.left.val;
}
node.left && getSum(node.left);
node.right && getSum(node.right);
};
getSum(root);
return sum;
};
卡哥的思路: