Я прочитал еще несколько статей, которые выглядели похожими, но не совсем ответили на мою проблему. Мне задан вопрос о назначении назначить каждому узлу в двоичном дереве соответствующую глубину. Я просто не могу это получить.Назначение глубины каждому узлу
Для справки это мой код:
struct treeNode {
int item;
int depth;
treeNode *left;
treeNode *right;
};
typedef treeNode *Tree;
int assignDepth(Tree &T, int depth)
{
if(T!=NULL)
{
depth = assignDepth(T->left, depth++);
T->depth = depth;
depth = assignDepth(T->right, depth++);
}
else //leaf
return depth--;
}
Я попытался запустить его через с ручкой и бумагой, и это выглядело хорошо, но мой стол проверки навыков явно не хватает.
Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Это мой первый раз, когда я использую деревья, а рекурсия - не моя сильная сторона.
Ответ:
void treecoords(Tree &T, int depth)
{
static int count = -1; //set to -1 so the precrement before assignment doesn't give the wrong values
if(T!=NULL)
{
treecoords(T->left, depth+1); //depth decrements automatically once this function call is removed from the stack
count++;
T->x = count;
T->y = depth;
treecoords(T->right, depth+1);
}
}
Спасибо всем, кто ответил на мой пост. Я понимаю, что теперь я думал об этом неправильно. Я уйду и попытаюсь исправить код, учитывая то, что вы сказали мне, и опубликовать мои окончательные результаты. Я не хочу просто использовать код someones без его полного понимания (хотя я ценю то, что вы отправили его для меня, спасибо). – xyzjace
Это работает! Я сделал рекурсивный алгоритм, который в итоге совпадал с г-ном Купером. Это фактически часть более крупного алгоритма, который присваивает координатам x и y узлам дерева. Теперь алгоритм находится в исходном вопросе. – xyzjace