前序遍历:
public List<Integer> preOrder(TreeNode root){
List<Integer> preret = new LinkedList<>();
if(root==null)
return preret;
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty()||root!=null){
while (root!=null){
preret.add(root.val);
stack.push(root);
root = root.left;
}
if(!stack.isEmpty()){
root = stack.pop();
root = root.right;
}
}
return preret;
}
中序遍历
public List<Integer> inOrder(TreeNode root){
List<Integer> inret = new LinkedList<>();
if(root==null)
return inret;
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty()||root!=null){
while (root!=null){
stack.push(root);
root = root.left;
}
if(!stack.isEmpty()){
root = stack.pop();
inret.add(root.val);
root = root.right;
}
}
return inret;
}
后序遍历
public List<Integer> postOrder(TreeNode root){
List<Integer> postret = new LinkedList<>();
if(root==null)
return postret;
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty()||root !=null){
while (root!=null){
stack.push(root);
root = root.left;
}
boolean isRight = true;
TreeNode preNode = null;
while(!stack.isEmpty()&&isRight==true){
root = stack.peek();
if(root.right==preNode){
root = stack.pop();
postret.add(root.val);
if (stack.isEmpty())
return postret;
else
preNode = root;
}
else {
root = root.right;
isRight = false;
}
}
}
return postret;
}