Leetcode前端必会系列:二叉树的中序遍历

44 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

引言

算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。

题目描述

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

 

示例 1:

输入: root = [1,null,2,3]
输出: [1,3,2]

示例 2:

输入: root = []
输出: []

示例 3:

输入: root = [1]
输出: [1]

 

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

分析

根据题目的分析,我们如何设计二叉树的中序遍历过程?借助栈,基于递归的设计是简单的方式了。

  1. 设计中序遍历的递归函数。
  2. 设计递归函数的出口就是当前节点是空就退出
  3. 根据中序遍历的过程,先访问左孩子,然后访问自己,最后是右孩子节点
  4. 所有遍历的节点保存数组,返回最后的结果。

解答

 /**

 * Definition for a binary tree node.

 * function TreeNode(val, left, right) {

 *     this.val = (val===undefined ? 0 : val)

 *     this.left = (left===undefined ? null : left)

 *     this.right = (right===undefined ? null : right)

 * }

 */

/**

 * @param {TreeNode} root

 * @return {number[]}

 */

 var inorderTraversal = function(root) {

  let res = []

  const main = node => {

    if(node) {

      main(node.left)

      res.push(node.val)

      main(node.right)

    }

  }

  main(root)

  return res

};

通过题目的分析,我们通过递归的设计十分简单的完成了二叉树的中序遍历过程,设计十分的简单方便。当然也可以基于栈的数据结果将递归的遍历方式转换为非递归的遍历方式。

总结

二叉树的中序遍历是日常数据结构中十分重要的,我们必须牢固的掌握其在具体应用和实践的应用。