二叉树遍历方式——递归法

在leetcode刷题中,二叉树的遍历方法可以简单的分为深度优先遍历和广度优先遍历。深度优先遍历可使用递归,迭代法,广度优先遍历可使用二叉树层序遍历法。本文将以小白的身份记录一下递归遍历法。

在学习中,递归要按照三要素进行:

  1. 确定递归参数和返回值,在具体代码中实现,在本案例中,我们要用一个数组的方式来存储遍历的节点,所以参数需要用数组vector来存放数值,由于vec需要进行改变,所以引用的时候需要注意物理引用格式。即vector<int> & vec。

int在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。
int&这里的&不是取地址符号,而是引用符号,引用是C++对C的一个重要补充。变量的引用就是变量的别名,讲的通俗一点就是另外一个名字.
————————————————
版权声明:本文为CSDN博主「可即」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/xiaojinger_123/article/details/120453429
  1. 确定终止条件,对于二叉树来说,当遍历到没有节点的时候即终止。

  1. 确定单层递归的原理。

根据递归三要素,我们可以去leetcode查看相关题目:

根据题目要求我们写出满足上述三要求的代码:

  1. 递归要确定传递的参数和返回的数值,在该代码中,由于没有需要返回的数值,所以使用void,传递的参数则由自定的一维数组vec进行传递:

void  traversal(TreeNode * cur, vector<int>& vec)
  1. 终止逻辑:当节点为空时终止:

if(cur ==nullptr) return;
  1. 递归单层逻辑:前序遍历法是中左右进行遍历,也就是先取中节点的数值,然后取左节点和右节点的数值。中序遍历则是左中右的方式,也就是先去左节点再去中间节点和右节点,同理,后序遍历是先取左节点,然后右节点,最后中间节点。

注意,中左右可以理解为中间节点遍历顺序。遍历完后,vec放的是前序遍历后所有节点的顺序。

vec.push_back(cur-> value);
traversal(vec -> left, vec);
traversal(vec -> right ,vec);

整篇代码如下:

class Solution{
public:
    void Traversal(TreeNode* cur, vector<int> & vec){
        if (cur == NULL) return;
        vec.push_back(cur -> val);
        Traversal(cur->left,vec);
        Traversal(cur->right,vec);

    }
    vector<int> preorderTraversal(TreeNode* root){
        vector<int> result;
        Traversal(root, result);
    return result;
    }
    
    

};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值