145. [二叉樹]二叉樹的後序遍歷
阿新 • • 發佈:2020-10-23
145. 二叉樹的後序遍歷
方法一:遞迴
class solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); postorderViste(root, ans); return ans; } public void postorderViste(TreeNode root, List<Integer> list){ if (root == null){ return ; } postorderViste(root.left, list); postorderViste(root.right, list); list.add(root.val); } }
方法二:迭代
class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<Integer>(); if (root == null) { return ans; } LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); TreeNode prev = null; while (root != null || !stack.isEmpty()) { while (root != null){ stack.offer(root); root = root.left; } root = stack.pollLast(); if(root.right == null || root.right == prev){ ans.add(root.val); prev = root; root = null; } else { stack.offer(root); root = root.right; } } return ans; } }