原题链接:https://oj.leetcode.com/problems/binary-tree-inorder-traversal/
和Binary Tree Preorder Traversal只有一行代码的区别。
方法I: use stack, iterative
@11.9.2014
这种方法是http://leetcode.com/2010/04/binary-search-tree-in-order-traversal.html 的Alternative Solution
public class Solution {
//solution2: use stack
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
ArrayList<Integer> result = new ArrayList<Integer>();
TreeNode p = root;
while(p!=null || !stack.isEmpty()){
if(p != null){
stack.push(p);
p = p.left;
}
else{
p = stack.pop();
result.add(p.val);
p = p.right;
}
}
return result;
}
}
方法II: Morris
public class Solution {
//Morris
public List<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> result = new ArrayList<Integer>();
TreeNode cur = root;
TreeNode prev = null;
while(cur!= null){
if(cur.left == null){
result.add(cur.val);
cur = cur.right;
}
else{
//locate prev as the predecessor of cur
prev = cur.left;
while(prev.right !=null && prev.right != cur){
prev = prev.right;
}
if(prev.right == null){
prev.right = cur;
cur = cur.left;
}
else{//prev.right == cur
result.add(cur.val);
prev.right = null;
cur = cur.right;
}
}
}
return result;
}
}