题目链接
法一(递归)
private List<Integer> preorder = new ArrayList<>();
private void dfs(TreeNode root){
if(root == null){
return;
}
preorder.add(root.val);
dfs(root.left);
dfs(root.right);
}
public List<Integer> preorderTraversal(TreeNode root) {
dfs(root);
return preorder;
}
法二(非递归)
public List<Integer> preorderTraversal_2(TreeNode root) {
List<Integer> ans = new ArrayList<>();
Deque<TreeNode> sk = new ArrayDeque<>();
TreeNode p = root;
while(p != null || !sk.isEmpty()){
while(p != null){
ans.add(p.val);
sk.push(p);
p = p.left;
}
if(!sk.isEmpty()){
p = sk.pop();
p = p.right;
}
}
return ans;
}
本地测试
lay.showTitle(144);
Solution144 sol144 = new Solution144();
List<Integer> arr144 = Arrays.asList(1,null,2,3);
TreeNode root144 = treeOpt.createTreeByLayerOrder(arr144);
treeOpt.layerOrder(root144);
arrayOpt.showIntList(sol144.preorderTraversal(root144));
arrayOpt.showIntList(sol144.preorderTraversal_2(root144));