LeetCode-in-All

94. Binary Tree Inorder Traversal

Easy

Given the root of a binary tree, return the inorder traversal of its nodes’ values.

Example 1:

Input: root = [1,null,2,3]

Output: [1,3,2]

Example 2:

Input: root = []

Output: []

Example 3:

Input: root = [1]

Output: [1]

Example 4:

Input: root = [1,2]

Output: [2,1]

Example 5:

Input: root = [1,null,2]

Output: [1,2]

Constraints:

Follow up: Recursive solution is trivial, could you do it iteratively?

Solution

require_relative '../../com_github_leetcode/tree_node'

# Definition for a binary tree node.
# class TreeNode
#     attr_accessor :val, :left, :right
#     def initialize(val = 0, left = nil, right = nil)
#         @val = val
#         @left = left
#         @right = right
#     end
# end
# @param {TreeNode} root
# @return {Integer[]}
def inorder_traversal(root)
  # puts "node = #{root&.val}"

  return [] if root.nil?

  nodes_visited = []

  unless root.left.nil?
    left_nodes = inorder_traversal(root.left)
    nodes_visited.concat(left_nodes)
  end

  nodes_visited << root.val

  unless root.right.nil?
    right_nodes = inorder_traversal(root.right)
    nodes_visited.concat(right_nodes)
  end

  nodes_visited
end