返回介绍

Binary Tree Level Order Traversal II

发布于 2025-02-22 13:01:28 字数 3480 浏览 0 评论 0 收藏 0

Source

Given a binary tree, return the bottom-up level order traversal of its nodes' values.
(ie, from left to right, level by level from leaf to root).

Example
Given binary tree {3,9,20,#,#,15,7},

  3
   / \
  9  20
  /  \
   15   7


return its bottom-up level order traversal as:
[
  [15,7],
  [9,20],
  [3]
]

题解

此题在普通的 BFS 基础上增加了逆序输出,简单的实现可以使用辅助栈或者最后对结果逆序。

Java - Stack

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *   public int val;
 *   public TreeNode left, right;
 *   public TreeNode(int val) {
 *     this.val = val;
 *     this.left = this.right = null;
 *   }
 * }
 */


public class Solution {
  /**
   * @param root: The root of binary tree.
   * @return: buttom-up level order a list of lists of integer
   */
  public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if (root == null) return result;

    Stack<ArrayList<Integer>> s = new Stack<ArrayList<Integer>>();
    Queue<TreeNode> q = new LinkedList<TreeNode>();
    q.offer(root);
    while (!q.isEmpty()) {
      int qLen = q.size();
      ArrayList<Integer> aList = new ArrayList<Integer>();
      for (int i = 0; i < qLen; i++) {
        TreeNode node = q.poll();
        aList.add(node.val);
        if (node.left != null) q.offer(node.left);
        if (node.right != null) q.offer(node.right);
      }
      s.push(aList);
    }

    while (!s.empty()) {
      result.add(s.pop());
    }
    return result;
  }
}

Java - Reverse

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *   public int val;
 *   public TreeNode left, right;
 *   public TreeNode(int val) {
 *     this.val = val;
 *     this.left = this.right = null;
 *   }
 * }
 */


public class Solution {
  /**
   * @param root: The root of binary tree.
   * @return: buttom-up level order a list of lists of integer
   */
  public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    if (root == null) return result;

    Queue<TreeNode> q = new LinkedList<TreeNode>();
    q.offer(root);
    while (!q.isEmpty()) {
      int qLen = q.size();
      ArrayList<Integer> aList = new ArrayList<Integer>();
      for (int i = 0; i < qLen; i++) {
        TreeNode node = q.poll();
        aList.add(node.val);
        if (node.left != null) q.offer(node.left);
        if (node.right != null) q.offer(node.right);
      }
      result.add(aList);
    }

    Collections.reverse(result);
    return result;
  }
}

源码分析

Java 中 Queue 是接口,通常可用 LinkedList 实例化。

复杂度分析

时间复杂度为 O(n)O(n)O(n), 使用了队列或者辅助栈作为辅助空间,空间复杂度为 O(n)O(n)O(n).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文