У меня есть метод в классе Tree
, который вычисляет глубину двоичного дерева поиска.Отображение узлов двоичного дерева поиска, которое принадлежит пути глубины дерева
Моей дополнительной задачей является то, что при вычислении глубины дерева также хранятся (или сохраняются в некотором роде) узлы, которые находятся на этом пути (от корня до самого удаленного листа).
Например, рассмотрим следующее дерево:
10
/\
6 13
/\ \
4 9 14
//
3 8
Мне нужно производить узлы: 8,9,6,10
У меня есть этот Node
класс:
class Node {
private:
Node *left;
Node *right;
int value;
public:
Node(int v = 0) : left(NULL) , right(NULL) , value(v) { cout << "Node construcotr " << endl;}
Node *getLeft() {return this->left;}
void setLeft(Node *n) {this->left = n;}
Node *getRight() {return this->right;}
void setRight(Node *n) {this->right = n;}
int getVal() {return this->value;}
};
И вот соответствующая часть класса :
class Tree {
private:
Node* root;
vector<int> vec; /*.....*/
int calcDepth(Node *n)
{
if (n == NULL)
return 0;
else
{
int ld = calcDepth(n->getLeft());
int rd = calcDepth(n->getRight());
if (ld > rd)
{
if (n->getLeft() != NULL) vec.push_back(n->getLeft()->getVal());
return ld + 1;
}
else
{
if (n->getRight() != NULL) vec.push_back(n->getRight()->getVal());
return rd + 1;
}
}
} // end of calcDepth
На данный момент это дает мне частичное решение (исключая корень и учитывая узел, который не является частью этого пути).
Может кто-нибудь помочь мне исправить этот код?
Кроме того, любые другие комментарии по поводу реализации также будут замечательными.
Можете ли вы показать нам фактический вывод, который генерирует ваша программа (вместе с ожидаемым выходом, если это не то же самое, что и в данном примере)? Обратите внимание, что полезно предоставить [SSCCE (Short, Self Contained, Correct (Compilable), Example)] (http://sscce.org) (с акцентом на автономный), поэтому мы можем запускать программу и видеть результаты для себя и проверить наши изменения, чтобы убедиться, что они работают. Также обратите внимание, что эти проблемы, как правило, довольно легко вычисляются путем записи того, что программа должна делать на каждом шаге для некоторого данного примера и написания кода оттуда. – Dukeling