Skip to content

Commit 174d25e

Browse files
authored
Merge pull request DaleStudy#82 from meoooh/main
Week 3 solutions
2 parents 4180ac1 + bfd9200 commit 174d25e

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

climbing-stairs/han.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
defmodule Solution do
2+
@spec climb_stairs(n :: integer) :: integer
3+
def climb_stairs(n) do
4+
do_climb_stairs(n, 1, 0, 1)
5+
end
6+
7+
defp do_climb_stairs(n, n, n_1, n_2), do: n_1 + n_2
8+
9+
defp do_climb_stairs(n, step, n_1, n_2) do
10+
do_climb_stairs(n, step + 1, n_2, n_1 + n_2)
11+
end
12+
end

maximum-depth-of-binary-tree/han.exs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Definition for a binary tree node.
2+
#
3+
# defmodule TreeNode do
4+
# @type t :: %__MODULE__{
5+
# val: integer,
6+
# left: TreeNode.t() | nil,
7+
# right: TreeNode.t() | nil
8+
# }
9+
# defstruct val: 0, left: nil, right: nil
10+
# end
11+
12+
defmodule Solution do
13+
@spec max_depth(root :: TreeNode.t | nil) :: integer
14+
def max_depth(nil, max_depth), do: max_depth
15+
16+
def max_depth(%TreeNode{left: left, right: right}, max_depth \\ 0) do
17+
Enum.max([max_depth(left, max_depth + 1), max_depth(right, max_depth + 1)])
18+
end
19+
end

same-tree/han.exs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Definition for a binary tree node.
2+
#
3+
# defmodule TreeNode do
4+
# @type t :: %__MODULE__{
5+
# val: integer,
6+
# left: TreeNode.t() | nil,
7+
# right: TreeNode.t() | nil
8+
# }
9+
# defstruct val: 0, left: nil, right: nil
10+
# end
11+
#
12+
# Super simple solution
13+
# defmodule Solution do
14+
# @spec is_same_tree(p :: TreeNode.t | nil, q :: TreeNode.t | nil) :: boolean
15+
# def is_same_tree(p, q) do
16+
# p == q
17+
# end
18+
# end
19+
20+
defmodule Solution do
21+
@spec is_same_tree(p :: TreeNode.t | nil, q :: TreeNode.t | nil) :: boolean
22+
def is_same_tree(nil, nil), do: true
23+
def is_same_tree(_, nil), do: false
24+
def is_same_tree(nil, _), do: false
25+
26+
def is_same_tree(p, q) do
27+
p.val == q.val && is_same_tree(p.left, q.left) && is_same_tree(p.right, q.right)
28+
end
29+
end

subtree-of-another-tree/han.exs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Definition for a binary tree node.
2+
#
3+
# defmodule TreeNode do
4+
# @type t :: %__MODULE__{
5+
# val: integer,
6+
# left: TreeNode.t() | nil,
7+
# right: TreeNode.t() | nil
8+
# }
9+
# defstruct val: 0, left: nil, right: nil
10+
# end
11+
12+
defmodule Solution do
13+
@spec is_subtree(root :: TreeNode.t | nil, sub_root :: TreeNode.t | nil) :: boolean
14+
def is_subtree(root, root), do: true
15+
16+
def is_subtree(%TreeNode{left: left, right: right}, sub_root) do
17+
is_subtree(left, sub_root) || is_subtree(right, sub_root)
18+
end
19+
20+
def is_subtree(_, _), do: false
21+
end

0 commit comments

Comments
 (0)