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; } }