1、前序遍历
前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。
//前序遍历
void preorder(TreeNode *root, vector<int> &path)
{
if(root != NULL)
{
path.push_back(root->val);
preorder(root->left, path);
preorder(root->right, path);
}
}
2、中序遍历
中序遍历按照“左孩子-根结点-右孩子”的顺序进行访问。
//中序遍历
void inorder(TreeNode *root, vector<int> &path)
{
if(root != NULL)
{
inorder(root->left, path);
path.push_back(root->val);
inorder(root->right, path);
}
}
3、后序遍历
后序遍历按照“左孩子-右孩子-根结点”的顺序进行访问。
//后续遍历
void postorder(TreeNode *root, vector<int> &path)
{
if(root != NULL)
{
postorder(root->left, path);
postorder(root->right, path);
path.push_back(root->val);
}
}
由以上可见,二叉树的递归遍历,风格统一,逻辑和代码都很简单。如何实现二叉树的非递归遍历,请看我的下片博文:二叉树(三)——非递归遍历