void traverse(Node* root)
{
queue<Node*> q;
Node* temp_node= root;
while(temp_node)
{
cout<<temp_node->value<<endl;
if(temp_node->left)
q.push(temp_node->left);
if(temp_node->right)
q.push(temp_node->right);
if(!q.empty())
{
temp_node = q.front();
q.pop();
}
else
temp_node = NULL;
}
}
Вышеуказанный код - это код обхода порядка на уровне. Этот код работает отлично для меня, но одна вещь, которую мне не нравится, я явно инициализирую temp_node = NULL
, или я использую break. Но для меня это не очень хороший код.Обход порядка двоичного дерева
Есть ли опрятная реализация, чем это или как я могу сделать этот код лучше?
Отступ с вкладкой для консистенции. – Potatoswatter
О, это также обычно не называется «уровень-порядок». Его обычно называют «шириной первой», а не «глубиной первой». – Omnifarious
@Omnifarious IMHO, 'level-order' является гораздо более выразительным и кратким, чем терминология« ширина первого поиска »(BFS). Просто переходите на уровень за уровнем при прохождении. Как просто звучит! – RBT