代码随想录算法训练营第十二天 | 二叉树的递归遍历

73 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

二叉树的递归遍历

二叉树的递归遍历看起来实现很简单,但是如果不能总结其中的规律,每次写起来好像都在“靠运气”,一个条件出错可能直接不成功。所以我们首先来总结二叉树递归遍历的规律,也可以说是递归的规律。

首先我们来确定递归算法的三个要素:

  1. 确定递归函数的参数和返回值:确定递归函数里需要处理什么数据,也就是函数的参数。进而确定函数的返回值
  2. 确定终止条件:操作系统使用栈的结构来保存每一层递归的信息,如果终止条件没有给出,会出现栈溢出的错误,所以要提前确定终止的条件
  3. 确定单层递归的逻辑,也就是确定递归函数的逻辑,解题时会重复调用自己实现递归的过程

解题时把握好这三个要素,就能很容易的将题目解决。

接下来我们来确定二叉树递归遍历时的三个要素,以前序遍历为例:

  1. 确定递归函数的参数和返回值

处理的参数就是每次的根节点root,返回值是res数组。

  1. 确定终止条件
if(root===null) return; 

在递归的过程中递归结束的条件是当前遍历的节点为空,所以当当前便利的节点为空时,直接返回就可以。

  1. 确定单层递归的逻辑
res.push(root.val);
dfs(root.left);// 递归左子树
dfs(root.right);// 递归右子树

中序遍历

接下来将中序遍历的完整代码给出,相信根据上面前序遍历的分析和中序遍历的代码可以将三种遍历都掌握。

var inorderTraversal = function(root) {
    let res=[];
    const dfs=function(root){
        if(root===null){
            return;
        }
        dfs(root.left);
        res.push(root.val);
        dfs(root.right);
    }
    dfs(root);
    return res;
};