144. [二叉树]二叉树的前序遍历
144. 二叉树的前序遍历
方法一:递归
递归方法采用 DFS 深度优先搜索策略,在模拟时隐式地维护了一个栈,用来存放遍历过的 node。我们也可以用迭代法,显式地维护一个栈。
// 执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户
// 内存消耗: 36.9 MB , 在所有 Java 提交中击败了 80.60% 的用户
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ans = new ArrayList<>();
preorderViste(root, ans);
return ans;
}
// 利用 peroderViste,加 list 条件
private void preorderViste(TreeNode root, List<Integer> list) {
if (root == null) {
return ;
}
list.add(root.val);
preorderViste(root.left, list);
preorderViste(root.right, list);
}
}
方法二:迭代
// 执行用时: 0 ms , 在所有 Java 提交中击败了 100.00% 的用户
// 内存消耗: 36.9 MB , 在所有 Java 提交中击败了 79.40% 的用户
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
if (root == null){
return new ArrayList<>();
}
LinkedList<Integer> ans = new LinkedList<>();
LinkedList<TreeNode> stack = new LinkedList<>();
stack.offer(root);
while(!stack.isEmpty()){
TreeNode node = stack.pollLast();
ans.offer(node.val);
if (node.right != null){
stack.offer(node.right);
}
if (node.left != null){
stack.offer(node.left);
}
}
return ans;
}
}

浙公网安备 33010602011771号