Skip to content

Commit e302cfc

Browse files
committed
DFS grind
1 parent a6ee4a7 commit e302cfc

File tree

6 files changed

+160
-4
lines changed

6 files changed

+160
-4
lines changed

README.md

Lines changed: 8 additions & 4 deletions
Large diffs are not rendered by default.

my-submissions/m1026.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def maxAncestorDiff(self, root: Optional[TreeNode]) -> int:
9+
def helper(curr: Optional[TreeNode], minn: int, maxx: int) -> int :
10+
if not curr :
11+
return maxx - minn
12+
13+
if curr.val < minn :
14+
minn = curr.val
15+
if curr.val > maxx :
16+
maxx = curr.val
17+
18+
return max(maxx - minn,
19+
helper(curr.left, minn, maxx),
20+
helper(curr.right, minn, maxx))
21+
22+
23+
return helper(root, root.val, root.val)

my-submissions/m1038.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
10+
int adjustNodeValues(struct TreeNode* root, int addVal) {
11+
int add = root->val + addVal;
12+
if (root->right) {
13+
add += adjustNodeValues(root->right, addVal) - addVal;
14+
}
15+
16+
root->val = add;
17+
18+
if (root->left) {
19+
add += adjustNodeValues(root->left, add) - add;
20+
}
21+
22+
return add;
23+
}
24+
25+
struct TreeNode* bstToGst(struct TreeNode* root) {
26+
adjustNodeValues(root, 0);
27+
return root;
28+
}

my-submissions/m1973.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
10+
int output;
11+
12+
long helper(struct TreeNode* root) {
13+
if (!root) {
14+
return 0;
15+
}
16+
17+
long sum = helper(root->left) + helper(root->right);
18+
19+
if (root->val == sum) {
20+
output++;
21+
}
22+
23+
return sum + root->val;
24+
}
25+
26+
27+
int equalToDescendants(struct TreeNode* root) {
28+
output = 0;
29+
helper(root);
30+
31+
return output;
32+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def reverseOddLevels(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
9+
if not root or not root.left : # we are promised that every level is filled
10+
return root
11+
12+
level = 0
13+
nodes = (deque(), deque())
14+
15+
nodes[0].append(root.left)
16+
nodes[0].append(root.right)
17+
18+
while nodes[level] :
19+
if nodes[level][0].left and nodes[level][0].left.left :
20+
for node in nodes[level] :
21+
nodes[(level + 1) % 2].append(node.left.left)
22+
nodes[(level + 1) % 2].append(node.left.right)
23+
nodes[(level + 1) % 2].append(node.right.left)
24+
nodes[(level + 1) % 2].append(node.right.right)
25+
26+
while nodes[level] :
27+
nodes[level][0].val, nodes[level][-1].val = nodes[level][-1].val, nodes[level][0].val
28+
nodes[level].popleft()
29+
nodes[level].pop()
30+
31+
level = (level + 1) % 2
32+
33+
return root
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
class Solution:
8+
def reverseOddLevels(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
9+
10+
vals = []
11+
12+
def firstPass(curr: Optional[TreeNode], level: int) -> None :
13+
if curr.left :
14+
firstPass(curr.left, level + 1)
15+
16+
if level % 2 :
17+
vals.append(curr.val)
18+
19+
if curr.left :
20+
firstPass(curr.right, level + 1)
21+
22+
def secondPass(curr: Optional[TreeNode], level: int) -> None :
23+
if curr.left :
24+
secondPass(curr.left, level + 1)
25+
26+
if level % 2 :
27+
curr.val = vals.pop()
28+
29+
if curr.left :
30+
secondPass(curr.right, level + 1)
31+
32+
33+
firstPass(root, 0)
34+
secondPass(root, 0)
35+
36+
return root

0 commit comments

Comments
 (0)