一. 题目
二. 思路
前序遍历:根左右
三. 代码
1. 递归
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
{
final List<Integer> ans = new ArrayList<>();
void dfs(TreeNode cur)
{
if (cur == null) return;
ans.add(cur.val);
if (cur.left != null) dfs(cur.left);
if (cur.right != null) dfs(cur.right);
}
public List<Integer> preorderTraversal(TreeNode root)
{
ans.clear();
dfs(root);
return ans;
}
}
2. 迭代
class Solution
{
final List<Integer> ans = new ArrayList<>();
final Deque<TreeNode> stk = new ArrayDeque<>(110);//栈
public List<Integer> preorderTraversal(TreeNode root)
{
stk.clear();
ans.clear();
while (root != null || !stk.isEmpty())
{
while (root != null)//根左是一致遍历的
{
ans.add(root.val);
stk.offerLast(root);
root = root.left;
}
root = stk.pollLast();
root = root.right;//遍历右儿子
}
return ans;
}
}