都由堆栈实现,如下:
先序:
public List<Integer> preorderTraversal(TreeNode root) { Stack<TreeNode> stack=new Stack(); TreeNode rot=root; List<Integer> list=new ArrayList(); while(rot!=null||!stack.empty()) { if(rot!=null) { list.add(rot.val); stack.push(rot); rot=rot.left; } else { rot=stack.pop().right; } } return list; }
中序:
public List<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stack=new Stack(); List<Integer> list=new ArrayList(); TreeNode rot=root; while(!stack.isEmpty()||rot!=null) { while(rot!=null) { stack.push(rot); rot=rot.left; } TreeNode t1=stack.pop(); list.add(t1.val); rot=t1.right; } return list; }
后序:
public List<Integer> postorderTraversal(TreeNode root) { List<Integer> list=new ArrayList(); Stack<TreeNode> stack=new Stack(); TreeNode current=root; TreeNode previsit=null; while(!stack.isEmpty()||current!=null) { while(current!=null) { stack.push(current); current=current.left; } current=stack.peek(); if(current.right==null||current.right==previsit) { list.add(current.val); stack.pop(); previsit=current; current=null; } else { current=current.right; } } return list; }