方法一:
List<Integer> res=new LinkedList<>();
public List<Integer> inorderTraversal(TreeNode root) {
dfs(root);
return res;
}
public void dfs(TreeNode root){
if(root==null) return;
dfs(root.left);
res.add(root.val);
dfs(root.right);
}
方法二:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
//循环的两个前提条件:stack.size()保证右结点的遍历,root!=null保证左结点的遍历
while(stack.size()>0 || root!=null) {
if(root!=null) {
stack.add(root);
root = root.left;
} else {//当左结点遍历到头时弹出栈顶,访问结点并遍历这个结点的左子树
TreeNode tmp = stack.pop();
res.add(tmp.val);
root = tmp.right;
}
}
return res;
}