1. 程式人生 > 其它 >【Leetcode 145】js 二叉樹的後序遍歷

【Leetcode 145】js 二叉樹的後序遍歷

技術標籤:資料結構與演算法二叉樹演算法資料結構leetcodejavascript

二叉樹後序遍歷

所謂後續遍歷,即按照左右中的順序進行遍歷。

題目

給定一個二叉樹,返回它的後序遍歷。

示例:

輸入: [1,null,2,3]  
   1
    \
     2
    /
   3 
輸出: [3,2,1]

程式碼

遞迴演算法

var postorderTraversal = function(root , array = []){
    if(root){
        postorderTraversal(root.left , array);
        postorderTraversal
(root.right , array); array.push(root.val); } return array; }

image-20210117115414649

非遞迴演算法

初始化一個棧、結果陣列和記錄上次訪問節點的變數,當棧不為空或根節點不為空時,重複下面的步驟:

  1. 將左孩子入棧 → 直至左孩子為空
  2. 棧頂節點的右節點為空或被訪問過 → 節點出棧,存入結果陣列,標記為已訪問,繼續出棧查詢。
  3. 棧頂節點的右節點不為空且未被訪問 ,以右孩子為目標節點,執行1 、2 、3
var postorderTraversal = function (root) {
  const result = [];
  const
stack = []; var last = null; //標記上一個訪問的節點 let current = root; while (stack.length > 0 || current) { while (current) { stack.push(current); current = current.left; } current = stack[stack.length - 1]; if (!current.right || current.right == last) { current = stack.
pop(); result.push(current.val); last = current; current = null; } else { current = current.right; } } return result; }

image-20210117120650062

更多資料

整理不易,若對您有幫助,請給個「關注+點贊」,您的支援是我更新的動力