Создание исключения в рамках рекурсии - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь решить следующие вопросы:

Разработать алгоритм и написать код, чтобы найти первого общего предка двух узлов в двоичном дереве.Избегайте хранения дополнительных узлов в структуре данных.ПРИМЕЧАНИЕ. Это не обязательно двоичное дерево поиска.

Я написал псевдокод для решения ниже.Основная идея, что левые и правые поддеревья общего предка должны содержать два значения:

      Node ans;
      //These are the target values/nodes (In case of values, I am assuming the are unique, no repeated values)
     Value targetValue1,targetValue2;
     Boolean checkExistance(Node n, Value v, Value q){
          if n == null 
                  return false;
          elif n.value == v || n.value == q
                  return true;

          checkLeft = checkExistance(n.left,targetValue1,targetValue1);
          checkRight = checkExistance(n.right,targetValue1,targetValue1);

          if checkLeft == checkRight == false
                  return false;
          elif checkLeft == checkRight == true
                  ans = n;
                  thow new Excpetion("Common Ancestor was Found");
          //it contains one of the node 
          return true;
       }

Я полагаю, что исключение размотает стек и позволит избежать ненужных вызовов рекурсии.Мой вопрос - это хорошая практика, и есть ли шанс улучшить это решение, не используя неприятное исключение?

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