2013-11-22 6 views
-2

Это мой первый раз, когда я изучаю бинарные деревья, и я вижу много вопросов относительно обхода пути, одним из таких вопросов был поиск пути к определенному узлу. Это очень просто в двоичном дереве поиска, но это очень сложно в обычном двоичном дереве, поскольку элементы в узлах не имеют никакой связи между ними. Я придумал много логики, но ни один из них не работает для всех узлов в дереве. И я также хотел бы знать, что такое логика для прохождения каждого пути от корня до листового узла.Какова логика прохождения каждого пути в двоичном дереве на C++?

Thank you.

+0

без предоставления какого-либо кода, это вряд ли C++ вопроса ... – SBI

+0

я использую C++ для этих программ, и Мне нужна логика, я не думаю, что для этого нужен какой-то код. – user3020666

+0

Может помочь - http://stackoverflow.com/questions/5691926/traverse-every-unique-path-from-root-to-leaf-in-an-arbitrary-tree-structure –

ответ

1

Использование рекурсии. Детали варьируются в зависимости от того, как именно вы определили свое дерево, но это может выглядеть примерно так

void visit(TreeNode* node, vector<Node*>& path) 
{ 
    // check for NULL 
    if (node == NULL) 
     return; 
    // add node to path 
    path.push_back(node); 
    // print the node path 
    ... 
    // visit left child 
    visit(node->left, path); 
    // visit right child 
    visit(node->right, path); 
    // remove node from path 
    path.pop_back(); 
} 

// start at the root 
vector<Node*> path; 
visit(root, path); 
+0

Тот же вопрос, который я задал Сэму: эта логика подходит для обхода, но, например, если вопрос заключается в том, чтобы напечатать путь элемента, то как это сделать? – user3020666

+0

@ user3020666 Если ваше дерево имеет поле «parent», вы можете получить путь, просто следуя родительским ссылкам. Если нет, то все, что вам нужно сделать, это запомнить путь на вашем пути по дереву. Добавьте параметр 'path' в' visit' и добавьте к нему узлы, когда вы спускаетесь по дереву (и, возможно, удаляете из него узлы, когда вы возвращаетесь к дереву). – john

+0

@ user3020666 См. Редактирование. – john

Смежные вопросы