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