/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<Integer> postorderTraversal(TreeNode root) { // 后序遍历 List<Integer> res=new ArrayList<Integer>(); TreeNode temp=root; Stack<TreeNode> st=new Stack<TreeNode>(); TreeNode tail=null; while(temp!=null||!st.isEmpty()) { if(temp!=null) { st.push(temp); temp=temp.left; } else { temp=st.pop(); if(temp.right!=null) { if(tail==temp.right) { //访问该节点 res.add(temp.val); tail=temp; temp=null; } else { st.push(temp); temp=temp.right; } } else { res.add(temp.val); tail=temp; temp=null; } } } return res; } }