JS算法-二叉树的后序遍历

简介: JS算法-二叉树的后序遍历

题目


给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

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


题解


第一种


首先我们设定一个结果数组result用来保存后序遍历的结果。如果输入的二叉树为空,直接返回结果数组result,其次,创建两个栈s1和s2。s1用来存储待访问的节点,s2用来存储已访问的节点(即后序遍历的结果)将根节点root压入栈s1中。然后,当s1不为空的时候进行循环,每次弹出栈顶节点node并将其压入栈s2中,同时,将node的左右子节点压入栈s1中,以便下一次访问,最后,当s2不为空时,依次弹出栈顶节点node并将其值保存到结果数组result中。

var postorderTraversal = function (root) {
    let result = []
    if (root == null) {
      return result
    }
    let s1 = []
    let s2 = []
    s1.push(root)
    while (s1.length !== 0) {
      let node = s1.pop()
      s2.push(node)
      if (node.left !== null) {
        s1.push(node.left)
      }
      if (node.right !== null) {
        s1.push(node.right)
      }
    }
    while (s2.length !== 0) {
      let node = s2.pop()
      result.push(node.val)
    }
    return result
  };


第二种


定义一个空数组 targetArr,用于存放遍历结果。定义一个递归函数 getTargetNum,用于递归遍历整棵树,并将结果存入 targetArr。在 getTargetNum 函数中,首先判断当前节点 rootNode 是否为空,若为空则直接返回 null。 接着判断当前节点 rootNode 的左子树是否为空,如果不为空则递归遍历左子树,如果右子树为空,则将当前节点的值加入 targetArr。若当前节点 rootNode 的右子树不为空,则递归遍历右子树,将当前节点的值加入 targetArr。最后判断当前节点 rootNode 是否为叶子节点(左右子树均为空),如果是,则将当前节点的值加入 targetArr。最终返回 targetArr,即为后序遍历结果。

  var postorderTraversal = function(root) {
    let targetArr = [];
  var getTargetNum = function(rootNode){
    if(rootNode == null) return null;
    let leftF = rootNode.left;
    let rightF = rootNode.right;
    if(leftF){
      getTargetNum(leftF);
      if(rightF==null)targetArr.push(rootNode.val);
    }
    if(rightF){
      getTargetNum(rightF);
      targetArr.push(rootNode.val);
    }
    if(leftF==null && rightF==null){
      targetArr.push(rootNode.val);
    }
  }
相关文章
|
1月前
|
存储 算法
【数据结构与算法】二叉树基础OJ--下(巩固提高)
【数据结构与算法】二叉树基础OJ--下(巩固提高)
|
1月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
1月前
|
JavaScript 前端开发
JavaScript如何遍历表单元素?
JavaScript如何遍历表单元素?
|
24天前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
5天前
|
JavaScript 索引
JS 几种循环遍历
JS 几种循环遍历
8 0
JS 几种循环遍历
|
10天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
20天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
20天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
1月前
|
存储 算法 Python
数据结构与算法——二叉树介绍(附代码)
数据结构与算法——二叉树介绍(附代码)
22 3
|
1月前
|
JavaScript 前端开发 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
JavaScript循环遍历常用的7种方法以及常用的数组 API
35 0