leetcode刷題之旅(145)二叉樹的後序遍歷
阿新 • • 發佈:2018-12-11
題目描述
給定一個二叉樹,返回它的 後序 遍歷。
樣例
輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [3,2,1]
思路分析
方法一:遞迴,按照後序遍歷“左右根”的順序,依次遍歷,遞迴即可
方法二:迴圈寫法,寫法類似先序和中序,但新增的list時用了頭插,實際遍歷順序為右根左
方法三:利用雙棧,一個棧進行右根左的遍歷,另一棧儲存值,由於是先進後出,出棧順序就是後序遍歷的順序了
方法四:雙指標法
程式碼及結果
方法一:
public List<Integer> postorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if (root == null) { return list; } return postorderTraversal(root, list); } public List<Integer> postorderTraversal(TreeNode root,ArrayList<Integer> list) { if (root != null) { if (root.left != null) { postorderTraversal(root.left, list); } if (root.right != null) { postorderTraversal(root.right, list); } list.add(root.val); } return list; }
方法二:
public List<Integer> postorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if (root == null) { return list; } Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode temp = root; while (!stack.isEmpty() || temp != null) { while (temp != null) { stack.push(temp); list.add(0, temp.val); temp = temp.right; } temp = stack.pop(); temp = temp.left; } return list; }