Leetcode # 501 - режим поиска в двоичном дереве: проблема с рекурсией и передачей по ссылке - PullRequest
0 голосов
/ 08 марта 2020

Я считаю, что мой код работает в одном сценарии и прерывается в другом для проблемы Leetcode # 501 из-за пробелов в моем понимании концепций рекурсии и передачи по ссылке в Ruby.

Использование переменных экземпляра работает следующий код:

def find_mode(root)
  return [] if root.nil?
  @modes = []
  @counter = 1
  @max = 0
  @prev = nil
  inorder(root)
  @modes
end

def inorder(node)
  return if node.nil?

  inorder(node.left)

  if !@prev.nil?
    if @prev.val == node.val
      @counter += 1
    else
      @counter = 1
    end
  end

  if @counter > @max
    @max = @counter
    @modes = [node.val]
  elsif @counter == @max
    @modes << node.val
  end

  @prev = node

  inorder(node.right)
end

Однако следующая альтернативная версия не работает. Вместо этого время ожидания истекает.

def find_mode(root)
  return [] if root.nil?
  modes = []
  counter = 1
  max = 0
  prev = nil

  inorder(root, modes, prev, counter, max)
  modes
end

def inorder(node, modes, prev, counter, max)
  return if node.nil?
  inorder(node.left, modes, node, counter, max)

  if !prev.nil?
    if prev.val == node.val
      counter += 1
    else
      counter = 1
    end
  end

  if counter > max
    max = counter
    modes = [node.val]
  elsif counter == max
    modes << node.val
  end
  prev = node

  inorder(node.right, modes, node, counter, max)
end

Что я не понимаю во втором подходе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...