[路飞]leetcode-递归调用解决二叉树的遍历

350 阅读2分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」。

二叉树是什么

🌲树也是计算机中的一种常见结构,想像一棵圣诞树,最底部是一根树干,树干顶部开始无限分叉。二叉树呢,就是树干延伸的时候,每个根节点都有且最多只有两个节点,无限延伸。

二叉树的特点

  1. 每个点都有两个子节点
  2. 左节点比父节点小,右节点比父节点大
  3. 只有一个节点也分左右

leetcode-144.二叉树的前序遍历

原题

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

前序遍历规则

从根节点开始,先遍历左节点,后遍历右节点

演示文稿2.gif

代码如下

var preorderTraversal = function(root) {
  if (!root) return [];
  const result = [];
  result.push(result.val);
  result.push(...preorderTraversal(root.left));
  result.push(...preorderTraversal(root.right));
  return result;
};

94.二叉树的中序遍历

给定一个二叉树的根节点 root ,返回它的 中序 遍历。

中序遍历规则

从根点开始,遍历顺序依次为左节点、根节点、右节点

演示文稿3.gif

代码如下

var inorderTraversal = function (root) {
  const result = [];
  const inorder = (root) => {
    if (!root) return;
    inorder(root.left);
    result.push(root.val);
    inorder(root.right);
    return result;
  };
  inorder(root);
  return result;
};

leetcode-145.二叉树的后序遍历

给定一个二叉树的根节点 root ,返回它的 后序 遍历。

后序遍历规则

从根点开始,遍历顺序依次为左节点、右节点、根节点

演示文稿.gif

代码如下

var postorderTraversal = function (root) {
  const result = [];
  const postorder = (root) => {
    if (!root) return;
    postorder(root.left);
    postorder(root.right);
    result.push(root.val);
  };
  postorder(root);
  return result;
};

总结

我们可以用此三道题来熟练常见的代码组织之中的递归操作,非常适合代码小白来夯实代码递归基础。同时递归的方案也非常的简单。

此题除了递归方案之外还可以使用“迭代”的方案来实现,一般来说,递归是维护一个隐式的栈,而迭代是定义一个显式的栈,后面找时间会专门实现一篇迭代法的相关内容。

本次以上内容大家都看明白了么,自己也要上手试试哦~

ps:创作不易,求赞求关注思密达~~~

其他相关

下一道二叉树 226.翻转二叉树