Preorder: Обработать узел, переходят к левому ребенку, перейти к правому ребенку
void preorder(Node *root)
{
if (root == NULL) //<- Check if the currently passed node is empty
return; //<- if it is, return from the function back down the stack
cout << root->val << ", "; //<- if it wasn't empty, print its value
if (root->left != NULL) //<- check if the node to the left is empty
preorder(root->left); //<- if not recurse to the left child
if (root->right != NULL) //<- check if the node to the right is empty
preorder(root->right); //<- if not recurse to the right child
}
Симметричного: шаг влево, обрабатывает узел, перемещаются вправо
void inorder(Node *root)
{
if (root == NULL)
return;
if (root->left != NULL) //<- check if the node to the left is empty
inorder(root->left); //<- if not recurse to the left child
cout << root->val << ", ";
if (root->right != NULL) //<- check if the node to the right is empty
inorder(root->right); //<- if not recurse to the right child
}
Postorder: Переход к левому узлу, перейти к правый узел, процесс узел
void postorder(Node *root)
{
if (root == NULL)
return;
if (root->left != NULL) //<- check if the node to the left is empty
postorder(root->left); //<- if not recurse to the left child
if (root->right != NULL) //<- check if the node to the right is empty
postorder(root->right); //<- if not recurse to the right child
cout << root->val << ", "
}
1. Не вызывайте произвольный узел «root». 2. Если вы проверите * внутри * функцию для аргумента, являющегося 'NULL', вам не нужно проверять ее * перед * рекурсивным вызовом на указатели' left' и 'right'. Конечно, это избавляет вас от недействительных вызовов от несуществующих детей листьев, но OTOH добавляет накладные расходы на тестирование на всех внутренних узлах. – CiaPan
@CiaPan нулевое тестирование узла для простого возврата, если для возможности корня источника может быть пустым. –
Я знаю, для чего. Я просто указал, что тестирование 'if (node-> left)' before 'postorder (node-> left)' излишне, потому что функция снова проверит его после вызова. – CiaPan