和前序几乎一模一样,递归里面就是add的时间在进入左右子之间
非递归的就是把add那句话放进了else中,即当前node为null,pop stack返回上一层时加入这个node
递归:
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer> ();
helper(list, root);
return list;
}
public void helper( List<Integer> list, TreeNode node){
if( node == null )
return;
helper(list, node.left);
list.add(node.val);
helper(list, node.right);
return;
}
}
非递归:
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer> ();
Stack<TreeNode> stack = new Stack<TreeNode>();
while ( !stack.isEmpty() || root != null){
if ( root != null){
stack.push(root);
root = root.left;
}
else{
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
return list;
}
}