recursive version
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { Listret = new ArrayList<>(); public List preorderTraversal(TreeNode root) { dfs(root); return ret; } public void dfs(TreeNode node) { if (node == null) return; ret.add(node.val); dfs(node.left); dfs(node.right); }}
Non-recursive. It's relatively simple. So no explaination.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public ListpreorderTraversal(TreeNode root) { List ret = new ArrayList<>(); if (root == null) return ret; Stack s = new Stack (); s.add(root); while (!s.isEmpty()) { TreeNode node = s.pop(); ret.add(node.val); if (node.right != null) s.add(node.right); if (node.left != null) s.add(node.left); } return ret; }}