Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3}
,java
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?node
给定一个二叉树,输出前序遍历的结果,尝试使用两种方法实现算法
第一种:使用递归方式。
第二种:使用非递归的方法spa
结点类.net
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }
第一种方法:算法实现类code
import java.util.LinkedList; import java.util.List; public class Solution { private List<Integer> result; public List<Integer> preorderTraversal(TreeNode root) { result = new LinkedList<>(); preOrder(root); return result; } private void preOrder(TreeNode root) { if (root != null) { result.add(root.val); preOrder(root.left); preOrder(root.right); } } }
第二种方法:算法实现类递归
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new LinkedList<>(); if (root != null) { Deque<TreeNode> stack = new LinkedList<>(); stack.add(root); while (!stack.isEmpty()) { TreeNode node = stack.removeLast(); result.add(node.val); if (node.right != null) { stack.add(node.right); } if (node.left != null) { stack.add(node.left); } } } return result; } }