publicList<Integer>inorderTraversal(TreeNode root){List<Integer> res =newArrayList<>();if(root ==null)return res;Stack<TreeNode> stack =newStack<>();TreeNode cur = root;while(cur !=null||!stack.isEmpty()){//找最左边的节点while(cur !=null){
stack.push(cur);
cur = cur.left;}//弹出栈顶,访问
cur = stack.pop();
res.add(cur.val);//找右节点
cur = cur.right;}return res;}
后序遍历
//后序遍历相当于先序遍历的逆序publicList<Integer>postorderTraversal(TreeNode root){List<Integer> res =newArrayList<>();if(root ==null)return res;Stack<TreeNode> stack =newStack<>();
stack.push(root);while(!stack.isEmpty()){TreeNode cur = stack.pop();
res.add(cur.val);if(cur.left !=null) stack.push(cur.left);if(cur.right !=null) stack.push(cur.right);}// 反转return res.reversed();}