я пытаюсь сделать гр программу ++ для двоичного дерева поиска, которая будет содержать следующие функциональные возможности (на самом деле это часть моего назначения колледжа):, какой должна быть структура двоичного поиска узла дерева
A) создать двоичный поиск дерево.
B) Inorder, preorder, postorder traversals. (нерекурсивный)
C) Поиск Val в дереве.
D) Ширина первого прохода.
Е) Глубина первого обхода
F), граф листьев узлы, не-листа узлов.
G) Подсчет №. уровни
мои сомнения: -
1. обычно узел дерева имеет следующую структуру:
class node{
private:
node *lChild;
int info;
node *rChild;
}
поэтому в случае я хочу, чтобы выполнить глубину первой или в ширине первого обхода может я изменить структуру узла и добавить еще один указатель, указывающий на родительский, так что я могу легко двигаться назад в иерархии
class node{
private:
node *parent //pointer to parent node
node *lChild;
int info;
node *rChild;
}
рассматривается как обычная практика или плохая форма программирования двоичного дерева? и если это не считается хорошим способом программирования дерева, есть ли какой-либо другой способ или я должен использовать метод, указанный в книгах с использованием стека (для Depth First) и очереди (для первой ширины) для хранения узлов (посещенных или не посетил соответственно)
2. Это первый раз, когда я учу структуры данных, это будет большим подспорьем, если кто-то может объяснить простыми словами, что есть разница между рекурсивной и не рекурсивной обходе с двоичным учитываемое дерево
Знаете ли вы о рекурсивных функциях? То есть функции, которые называют себя? – Nick
@ Ник да, я знаю понятие рекурсии – Rahul
Прохладный. Поэтому вам просто нужно пройти через дерево из корня. То есть Вызовите свою функцию для каждого дочернего элемента (а затем каждого ребенка ... каждого ребенка). Требуемый обход определяется порядком, в котором вы: а) обрабатываете каждый узел и b) обрабатываете каждый ребенок. – Nick