解法1 - 递归
class Solution {
public List< Integer> inorderTraversal ( TreeNode root) {
List< Integer> list = new ArrayList < > ( ) ;
preorder ( list, root) ;
return list;
}
private void inorder ( List< Integer> list, TreeNode node) {
if ( node == null) return ;
list. add ( node. val) ;
inorder ( list, node. left) ;
inorder ( list, node. right) ;
}
}
解法2 - 非递归
class Solution {
public List< Integer> inorderTraversal ( TreeNode root) {
if ( root == null) return new ArrayList < > ( ) ;
List< Integer> list = new ArrayList < > ( ) ;
Stack< TreeNode> stack = new Stack < TreeNode> ( ) ;
while ( root != null || ! stack. isEmpty ( ) ) {
if ( root != null) {
stack. push ( root) ;
root = root. left;
} else {
TreeNode node = stack. pop ( ) ;
list. add ( node. val) ;
root = node. right;
}
}
return list;
}
}