在《C++中二叉树的非递归遍历方法2-1》中提到,二叉树的遍历分为前序遍历、中序遍历、后序遍历和层序遍历四种。要遍历的二叉树如图1所示。
图1 二叉树结构
创建该二叉树的代码请参见《C++中二叉树的非递归遍历方法2-1》。
1 前序遍历的递归实现
前序遍历的输出顺序是根节点、左子树和右子树。
1.1 流程图
前序遍历的递归流程如图2所示。
图2 前序遍历的递归流程图
1.2 代码实现
前序遍历的递归实现如下所示。
void preOrderTraveral(TreeNode* node)
{
if (node == nullptr)
{
return;
}
cout << node->data <<endl;
preOrderTraveral(node->leftChild);
preOrderTraveral(node->rightChild);
}
2 中序遍历的递归实现
中序遍历的输出顺序是左子树、根节点和右子树。
2.1 流程图
中序遍历的递归流程如图3所示。
图3 中序遍历的递归流程图
2.2 代码实现
中序遍历的递归实现如下所示。
void inOrderTraveral(TreeNode* node)
{
if (node == nullptr)
{
return;
}
inOrderTraveral(node->leftChild);
cout << node->data << endl;
inOrderTraveral(node->rightChild);
}
3 后序遍历的递归实现
后序遍历的输出是左子树、右子树和根节点。
3.1 流程图
后序遍历的递归流程如图4所示。
图4 后序遍历的递归流程图
3.2 代码实现
后序遍历的递归实现如下所示。
void postOrderTraveral(TreeNode* node)
{
if (node == nullptr)
{
return;
}
postOrderTraveral(node->leftChild);
postOrderTraveral(node->rightChild);
cout << node->data << endl;
}