【从零开始】二叉树全攻略(00):遍历方式

00 写在前面

二叉树的遍历分为两种,递归和迭代。

递归是不好想但是实现简单的那种,迭代则是符合思考模式却不好实现的那种。

这次总结一下递归,迭代和统一迭代三种方法。

01 二叉树遍历

首先需要知道的是二叉树的遍历顺序,包括前序、中序和后序。这三种遍历的区别在于根节点的位置。

前序遍历是中左右,中序遍历是左中右,后续遍历是左右中。

另外还需要复习一下二叉树节点的结构:

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
};

和链表差不多。

02 二叉树递归遍历

递归需要特别注意三个点:

  1. 函数的参数和返回值
  2. 递归终止的条件
  3. 每层的逻辑

前序遍历

先构造函数,输出遍历后的节点,不需要返回值

void PreOrder(TreeNode* cur,vector<int> &vec){
    if(cur==NULL)return;
    
    vec.push_back(cur->val);//中节点
    PreOrder(cur->left,vec);//左孩子
    PreOrder(cur->right,vec);//右孩子
}

首先把中节点存入,再递归遍历左孩子和右孩子。形成中左右的顺序。

这里不使用vector存也可以,直接输出。

中序遍历

中序遍历只需要修改一下遍历顺序即可。形成左中右的顺序。

void InOrder(TreeNode* cur,vector<int> &vec){
    if(cur==NULL)return; 
    
    PreOrder(cur->left,vec);//左孩子
    vec.push_back(cur->val);//中节点
    PreOrder(cur->right,vec);//右孩子
}

后序遍历

后序遍历也只需要修改一下遍历顺序即可。形成左右中的顺序。

void PostOrder(TreeNode* cur,vector<int> &vec){
    if(cur==NULL)return; 
    
    PreOr
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值