其他分享
首页 > 其他分享> > LeetCode 0144 Binary Tree Preorder Traversal

LeetCode 0144 Binary Tree Preorder Traversal

作者:互联网

原题传送门

1. 题目描述

2. Solution 1

1、思路分析
先序遍历: 根左右,递归实现。

2、代码实现

package Q0199.Q0144BinaryTreePreorderTraversal;

import DataStructure.TreeNode;

import java.util.ArrayList;
import java.util.List;

/*
   先序遍历: 根左右
   method 1: 递归做法
 */
public class Solution {

    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        helper(result, root);
        return result;
    }

    private void helper(List<Integer> result, TreeNode root) {
        if (root != null) {
            result.add(root.val);
            helper(result, root.left);
            helper(result, root.right);
        }
    }
}

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)

3. Solution 2

1、思路分析
使用栈,迭代实现。

2、代码实现

package Q0199.Q0144BinaryTreePreorderTraversal;

import DataStructure.TreeNode;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;

/*
   用Stack 代替 递归
 */
public class Solution2 {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new LinkedList<>();
        Deque<TreeNode> stack = new ArrayDeque<>();
        TreeNode cur = root;
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                result.add(cur.val);
                stack.push(cur);
                cur = cur.left;
            }
            cur = stack.pop();
            cur = cur.right;
        }
        return result;
    }
}

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)

标签:Binary,cur,Preorder,List,复杂度,Tree,result,import,root
来源: https://www.cnblogs.com/junstat/p/16299915.html