来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/

描述

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

示例:
输入: [1,null,2,3]
1
\
2
/
3

输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

题解

递归

  1. class Solution {
  2. List<Integer> list = new ArrayList<>();
  3. public List<Integer> preorderTraversal(TreeNode root) {
  4. if (root == null) {
  5. return list;
  6. }
  7. list.add(root.val);
  8. if (root.left != null) {
  9. preorderTraversal(root.left);
  10. }
  11. if (root.right != null) {
  12. preorderTraversal(root.right);
  13. }
  14. return list;
  15. }
  16. }

迭代

  1. class Solution {
  2. public List<Integer> preorderTraversal(TreeNode root) {
  3. LinkedList<TreeNode> stack = new LinkedList<>();
  4. LinkedList<Integer> res = new LinkedList<>();
  5. if (root == null) {
  6. return res;
  7. }
  8. stack.add(root);
  9. while (!stack.isEmpty()) {
  10. TreeNode node = stack.removeLast();
  11. res.add(node.val);
  12. if (node.right != null) {
  13. stack.add(node.right);
  14. }
  15. if (node.left != null) {
  16. stack.add(node.left);
  17. }
  18. }
  19. return res;
  20. }
  21. }

复杂度分析

  • 时间复杂度:访问每个节点恰好一次,时间复杂度为144. 二叉树的前序遍历(Binary Tree Preorder Traversal) - 图1 ,其中144. 二叉树的前序遍历(Binary Tree Preorder Traversal) - 图2是节点的个数,也就是树的大小。
  • 空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是144. 二叉树的前序遍历(Binary Tree Preorder Traversal) - 图3