Я собираюсь предположить, что id
является ключом поиска для дерева.Другими словами, id
любого узла в левом поддереве меньше, чем id
этого узла, а id
любого узла в правом поддереве больше, чем id
этого узла.Кроме того, id
считается уникальным.
Чтобы найти узел с заданным идентификатором по указателю на корневой узел дерева, вы просто делаете:
CP* find(CP* root, int searchID)
{
// Starting point.
CP* node = root;
while(node)
{
// Search hit?
if(node->id == searchID)
return node;
// Turn left or right?
if(node->id < searchID)
node = node->left;
else
node = node->right;
}
return 0; // No node with the given ID found.
}
Поиск глубины - это простая модификация этой функции: вместо того, чтобы возвращать узел, вы сохраняете счет того, сколько уровней вы опускаете.Глубина 0 означает, что вам нужен корневой узел;глубина 1 означает либо левый, либо правый узлы;Глубина 2 означает любого из их прямых потомков и т. д. Так что на самом деле, сколько раз вам нужно выполнить цикл:
int depth(CP* root, int searchID)
{
// Starting point.
CP* node = root;
int depth = 0;
while(node)
{
// Search hit?
if(node->id == searchID)
return depth;
// Descending a level...
++depth;
// Turn left or right?
if(node->id < searchID)
node = node->left;
else
node = node->right;
}
return -1; // No node with the given ID found.
}
Обратите внимание на специальное значение -1 для "not found".