思路:
先序遍历:根-左,右
中序遍历:左,根,右
后序遍历:左-右-根
可以发现,只是访问根节点顺序不同而已‘
后序遍历,左右根,也就是根右左然后逆序!!!(先序遍历是根左右,则后续遍历时候入栈时先入左边再右边)最后的结果逆序输出一下就行!
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution {//后序遍历,左右根,也就是根右左然后逆序!!!(先序遍历是跟左右,则后续遍历时候入栈时先入左边再右边)最后的结果逆序输出一下就行! public List<Integer> postorderTraversal(TreeNode root) { List<Integer>res=new ArrayList<Integer>(); if(root==null)return res; Stack<TreeNode> stack=new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()) { TreeNode n=stack.pop(); res.add(n.val); if(n.left!=null) { stack.push(n.left); } if(n.right!=null) { stack.push(n.right); } } Collections.reverse(res); return res; } }