二叉树的前序、中序、后序的递归遍历及迭代遍历
最近复习二叉树时,又复习到了二叉树的经典问题:前序、中序、后序遍历。所以写这篇blog记录自己的心得体会,也分享出来供大家学习参考。
首先要明确一点,前、中、后序的遍历方式有什么不同:这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住前中后序指的就是中间节点的位置就可以了。
看如下中间节点的顺序,就可以发现,中间节点的顺序就是所谓的遍历方式:
- 前序遍历:中左右
- 中序遍历:左中右
- 后序遍历:左右中
下面给大家带来递归的前序、中序、后序遍历方式:
递归前序遍历:
void traversal(TreeNode* root, vector<int>res)
{
if(root == NULL) return; //节点为空直接返回
res.push_back(root -> val);
traversal(root -> left); //左节点
traversal(root -> right);//右节点
}
递归中序遍历:
void traversal(TreeNode* root, vector<int>res)
{
if(root == NULL) return; //节点为空直接返回
traversal(root -> left); //左节点
res.push_back(root -> val); //中间节点