preorder: root-left-right
inorder: left-root-right
postorder: left-right-root
order指的是root的位置。
recursive算法比较简单,iterative算法比较难想,可是leetcode原题都说了: recursive method is trivial, could you do iteration?
144.Binary Tree Preorder Traversal
/*iterative*/
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
if(root == null) return result;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
TreeNode n = root;
while(!stack.isEmpty()){
n = stack.pop();
result.add(n.val);
if(n.right!= null) stack.push(n.right);
if(n.left != null) stack.push(n.left);
}
return result;
}
/*recursive*/
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
preHelper(root,result);
return result;
}
private void preHelper(TreeNode n, List<Integer> result){
if(n == null) return;
result.add(n.val);
if(n.left != null) preHelper(n.left,result);
if(n.right!= null) preHelper(n.right,result);
}
94.Binary Tree Inorder Traversal
/*iterative*/
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
TreeNode curr =root;
Stack<TreeNode> stack = new Stack<>();
while(curr!=null || !stack.isEmpty()){
while(curr!=null){
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
result.add(curr.val);
curr = curr.right;
}
return result;
}
/* recursive*/
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
inHelper(root,result);
return result;
}
private void inHelper(TreeNode n, List<Integer> result){
if(n == null) return;
if(n.left!=null) inHelper(n.left,result);
result.add(n.val);
if(n.right != null) inHelper(n.right,result);
}
145.Binary Tree Postorder Traversal
/*iterative*/
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<Integer> result = new LinkedList<>();
if(root == null) return result;
TreeNode curr = root;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
curr = stack.pop();
result.addFirst(curr.val);
if(curr.left != null)
stack.push(curr.left);
if(curr.right != null)
stack.push(curr.right);
}
return result;
}
/*recursive*/
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new LinkedList<>();
postHelper(root,result);
return result;
}
private void postHelper(TreeNode n, List<Integer> result){
if(n == null) return;
if(n.left != null) postHelper(n.left,result);
if(n.right!= null) postHelper(n.right,result);
result.add(n.val);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。