public List<Integer>preorderTraversal(TreeNode root){
List<Integer> list =newArrayList<>();if(root==null){return list;}
Stack<TreeNode> stack =newStack<>();
stack.push(root);while(stack.isEmpty()==false){
TreeNode treeNode = stack.pop();
list.add(treeNode.val);//先压入的节点后访问,所有先右后左if(treeNode.right!=null){
stack.push(treeNode.right);}if(treeNode.left!=null){
stack.push(treeNode.left);}}return list;}
中序遍历
public List<Integer>inorderTraversal(TreeNode root){
List<Integer> list =newArrayList<>();
Stack<TreeNode> stack =newStack<>();
TreeNode cur = root;while(cur != null ||!stack.isEmpty()){if(cur != null){
stack.push(cur);
cur = cur.left;}else{
cur = stack.pop();
list.add(cur.val);
cur = cur.right;}}return list;}
后序遍历
public List<Integer>preorderTraversal(TreeNode root){
List<Integer> list =newArrayList<>();if(root==null){return list;}
Stack<TreeNode> stack =newStack<>();
stack.push(root);while(stack.isEmpty()==false){
TreeNode treeNode = stack.pop();//倒序插入
list.add(0,treeNode.val);//先压入的节点后访问,所有先左后右if(treeNode.left!=null){
stack.push(treeNode.left);}if(treeNode.right!=null){
stack.push(treeNode.right);}}return list;}