Skip to content

Commit dae2e4b

Browse files
committed
update 4 leetcode
1 parent b2e3095 commit dae2e4b

File tree

4 files changed

+211
-0
lines changed

4 files changed

+211
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* @lc app=leetcode id=1022 lang=javascript
3+
*
4+
* [1022] Sum of Root To Leaf Binary Numbers
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val, left, right) {
11+
* this.val = (val===undefined ? 0 : val)
12+
* this.left = (left===undefined ? null : left)
13+
* this.right = (right===undefined ? null : right)
14+
* }
15+
*/
16+
/**
17+
* 递归遍历,然后使用函数参数来保存值
18+
* @param {TreeNode} root
19+
* @return {number}
20+
*/
21+
var sumRootToLeaf = function(root) {
22+
let ans = [];
23+
24+
function dfsSum(node, currentSum = '') {
25+
if (!node) {
26+
return null;
27+
}
28+
currentSum += node.val;
29+
if (node.left === null && node.right === null) {
30+
return ans.push(currentSum);
31+
} else {
32+
dfsSum(node.left, currentSum);
33+
dfsSum(node.right, currentSum);
34+
}
35+
}
36+
37+
dfsSum(root, '');
38+
39+
return ans.reduce((acc, cur) => acc + parseInt(cur, 2), 0);
40+
};
41+
// @lc code=end
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* @lc app=leetcode id=110 lang=javascript
3+
*
4+
* [110] Balanced Binary Tree
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val, left, right) {
11+
* this.val = (val===undefined ? 0 : val)
12+
* this.left = (left===undefined ? null : left)
13+
* this.right = (right===undefined ? null : right)
14+
* }
15+
*/
16+
/**
17+
* 类似于 543 题取最大深度
18+
* @param {TreeNode} root
19+
* @return {boolean}
20+
*/
21+
var isBalanced = function(root) {
22+
let unBalanced = false;
23+
function dfs(node) {
24+
// 当前节点不存在或者已经判定是不平衡的树了,就停止
25+
if (!node || unBalanced) {
26+
return 0;
27+
}
28+
// 取出左右深度来比较
29+
let left = dfs(node.left);
30+
let right = dfs(node.right);
31+
// 超过平衡了,标记为不平衡
32+
if (Math.abs(left - right) > 1) {
33+
unBalanced = true;
34+
}
35+
// 取得当前节点的最深的深度,向上返回就是加一
36+
return Math.max(left, right) + 1;
37+
}
38+
39+
dfs(root);
40+
41+
return !unBalanced;
42+
};
43+
// @lc code=end
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* @lc app=leetcode id=515 lang=javascript
3+
*
4+
* [515] Find Largest Value in Each Tree Row
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val, left, right) {
11+
* this.val = (val===undefined ? 0 : val)
12+
* this.left = (left===undefined ? null : left)
13+
* this.right = (right===undefined ? null : right)
14+
* }
15+
*/
16+
/**
17+
* 迭代的方式
18+
* @param {TreeNode} root
19+
* @return {number[]}
20+
*/
21+
var largestValues = function(root) {
22+
if (!root) {
23+
return [];
24+
}
25+
let queues = [root]; // 保存用于迭代的队列
26+
let level = 0; // 保存层级
27+
let res = []; // 保存结果
28+
29+
while (queues.length) {
30+
let len = queues.length;
31+
32+
// 每一层的迭代
33+
while (len--) {
34+
const current = queues.shift();
35+
if (current) {
36+
// 设置默认值
37+
res[level] = res[level] || [Number.MIN_SAFE_INTEGER];
38+
// 如果当前值比较大,就覆盖填入
39+
if (res[level][0] < current.val) {
40+
res[level] = [current.val];
41+
}
42+
queues.push(current.left);
43+
queues.push(current.right);
44+
}
45+
}
46+
47+
// 递进层级
48+
level++;
49+
}
50+
51+
return res;
52+
};
53+
// @lc code=end
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* @lc app=leetcode id=897 lang=javascript
3+
*
4+
* [897] Increasing Order Search Tree
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val, left, right) {
11+
* this.val = (val===undefined ? 0 : val)
12+
* this.left = (left===undefined ? null : left)
13+
* this.right = (right===undefined ? null : right)
14+
* }
15+
*/
16+
/**
17+
* 类似于链表的处理
18+
* @param {TreeNode} root
19+
* @return {TreeNode}
20+
*/
21+
var increasingBST = function(root) {
22+
// 新建一棵树节点哑结点
23+
let dummyNode = new TreeNode(-1);
24+
// 保存副本,用于遍历,不影响原来节点
25+
let rootAns = dummyNode;
26+
27+
function dfs(node) {
28+
if (!node) {
29+
return null;
30+
}
31+
dfs(node.left);
32+
// 在遍历过程中就直接实现节点
33+
rootAns.right = new TreeNode(node.val);
34+
rootAns.left = null;
35+
rootAns = rootAns.right;
36+
dfs(node.right);
37+
}
38+
dfs(root);
39+
40+
// 源节点的右边就是结果
41+
return dummyNode.right;
42+
};
43+
44+
var increasingBST2 = function(root) {
45+
// 把中序遍历的结果也就是递增的保存到数组中
46+
let res = [];
47+
function dfs(node) {
48+
if (!node) {
49+
return null;
50+
}
51+
dfs(node.left);
52+
res.push(node.val);
53+
dfs(node.right);
54+
}
55+
dfs(root);
56+
57+
let index = 0;
58+
59+
// 遍历数组来创建二叉树
60+
function createNode() {
61+
// 当索引到数组长度时停止
62+
if (index === res.length) {
63+
return null;
64+
}
65+
let node = new TreeNode(res[index]);
66+
index++;
67+
// 单向的,所以只需添加右边节点
68+
node.right = createNode();
69+
return node;
70+
}
71+
72+
return createNode();
73+
};
74+
// @lc code=end

0 commit comments

Comments
 (0)