private void pre(TreeNode root, List<Integer> res) {
LinkedList<TreeNode> stack = new LinkedList<>();
while (root != null || !stack.isEmpty()) {
while (root != null) {
res.add(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop().right;
}
}
private void inOrder(TreeNode root,List<Integer> list){
LinkedList<TreeNode> stack=new LinkedList<>();
while(root!=null || !stack.isEmpty()){
while(root!=null){
stack.push(root);
root=root.left;
}
TreeNode parent=stack.pop();
list.add(parent.val);
root=parent.right;
}
}
private void postOrder(TreeNode root, List<Integer> list){
LinkedList<TreeNode> stack=new LinkedList<>();
TreeNode p=null;
while(root!=null || !stack.isEmpty()){
while(root!=null){
stack.push(root);
root=root.left;
}
root=stack.peek();
if(root.right == null || root.right == p){
list.add(root.val);
stack.pop();
p = root;
root = null;
}else{
root = root.right;
}
}
}