先上图。第一次100%。开心!!!
解题思路:
第一步:直接来个遍历(先序、中序、后序、层序遍历都可以),这里用的是先序遍历。 第二步:用一个值,存储结果,先默认为true,这样只需要判断false的情况就可以了。 第三步:判断当前节点与子结点的关系
- 3.1 如果该节点为null,return结束遍历
- 3.2 如果此时的结果为false(表示已经又节点不满足的),return结束遍历
- 3.3 如果此时的节点为叶子节点,return结束遍历,因为叶子节点没有子结点,根据题意不需要满足条件。
- 3.4 有左节点,保存左节点的值。有右节点保存右节点的值,此时比较根节点与左右节点的值,不满足条件直接设置结果为false。
- 3.5 重复遍历3.1-3.4(因为这里用的是递归遍历)
代码如下:
var checkTree = function(root) {
let result = true;
function preView(node) {
if(!node || !result || (!node.left && !node.right)) return;
let left = 0, right = 0;
if(node.left) {
left = node.left.val;
}
if(node.right) {
right = node.right.val;
}
if(node.val != left + right) {
result = false;
}
if(node.left) preView(node.left);
if(node.right) preView(node.right);
}
preView(root);
return result;
};