Я учусь на собеседование и изучаю деревья, у меня нет проблем при их обходе, но я получил вопрос, на который я не смог найти правильный ответ:
Напишите функцию, которая возвращает узел в дереве с двумя параметрами: указатель на корневой узел и номер обхода узла, который мы хотим вернуть.Единственная информация, хранящаяся в дереве, - это число дочерних элементов для каждого узла.
До сих пор я даже не мог понять, почему мне нужно заботиться о информации, хранящейся в дереве (Число детей).Кроме этого, если мы предположим, что есть такое дерево:
5
4 7
3 1 4
, тогда обход Inorder будет 341547
, но я не могу понять код для возврата нужного мне узла (ради аргументаЯ предполагаю, что номер обхода по порядку равен 2 - это означает, что я хочу узел значения 1).
Я попытался сделать рекурсивный обход, но в итоге я облажал внутренний счетчик, который у меня был, поэтому я попробовал другой подходЯ просто пытался поместить все в стек, но я не могу понять, как это правильно сделать.Пока у меня есть:
public int findNode(root, position){
Stack<Integer> s = new Stack<Integer>();
cNode = root; //cNode = current Node
while(cNode.left != null)
cNode = cNode.left;
s.push(cNode);
while(cNode.right != null)
cNode = cNode.right;
//stuck here.
}
Рекурсивный подход был проще, но я не могу понять, как проверить, есть ли у меня #, который я ищу:
public int findNode(root, position){
cNode = root;
if(cNode != null){
findNode(cNode.left, position);
System.out.print(cNode.data);
findNode(cNode.right, position);
}
}
Я знаюэто пересекает дерево, но все еще не делает именно то, что я хочу.Любая помощь будет оценена.