zoukankan      html  css  js  c++  java
  • 二叉树的中序遍历

    2020-04-02
    二叉树的中序遍历

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

    题解:
    思路1: 递归
    递归的方法最简单 容易理解
     
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number[]}
     */
    var inorderTraversal = function (root) {
      let arr = [];
      let fn = function (node) {
        if (node !== null) {
          fn(node.left);
          arr.push(node.val);
          fn(node.right);
        }
      }
      fn(root);
      return arr;
    };
    思路2: 栈
    用栈的思想遍历树 每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。
    在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。
     
    var inorderTraversal = function (root) {
      let stack = []; // 遍历树时用的栈
      let res = []; // 结果
      while (stack.length > 0 || root !== null) { // 当栈不为空或是当前节点不为null时进入循环
        if (root !== null) { // 若当前节点有值
          stack.push(root.val); // 将当前节点推入栈中
          root = root.left; // 继续遍历root.left
        } else {
          const tmp = stack.pop(); // 如果栈不为空且当前节点为null 说明到了最底部
          res.push(tmp); // 将栈的最后一项出栈 这一项就是当前节点的父节点 也就是结果的第一个值
          root = tmp.right; // 再遍历该节点的right
        }
      }
      return res;
    };
  • 相关阅读:
    linux_进程管理
    Linux-日志管理
    Httpd
    Linux-源码安装包管理
    Linux-计划任务管理
    Linux-LVM管理
    Linux-系统磁盘管理
    Linux-yum工具的使用
    Linux-rpm包管理
    Linux-网络进阶管理
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/12617566.html
Copyright © 2011-2022 走看看