【Leetcode 145】js 二叉樹的後序遍歷
阿新 • • 發佈:2021-01-19
技術標籤:資料結構與演算法二叉樹演算法資料結構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;
}
非遞迴演算法
初始化一個棧、結果陣列和記錄上次訪問節點的變數,當棧不為空或根節點不為空時,重複下面的步驟:
- 將左孩子入棧 → 直至左孩子為空
- 棧頂節點的右節點為空或被訪問過 → 節點出棧,存入結果陣列,標記為已訪問,繼續出棧查詢。
- 棧頂節點的右節點不為空且未被訪問 ,以右孩子為目標節點,執行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;
}
更多資料
整理不易,若對您有幫助,請給個「關注+點贊」,您的支援是我更新的動力