Skip to content

Latest commit

 

History

History
62 lines (57 loc) · 1.65 KB

37_二叉树_145. 二叉树的后序遍历.md

File metadata and controls

62 lines (57 loc) · 1.65 KB

-- 二叉树 - easy 点击直达力扣

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。

方法一:递归法

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */
let result = []
function postorderTraversal(root: TreeNode | null): number[] {
    result = []
    traversal(root)
    return result
};
function traversal(root: TreeNode | null): void {
    if (root === null) {
        return
    }
    traversal(root.left)
    traversal(root.right)
    result.push(root.val)
}

方法二:迭代法:

后序遍历:左右中

那么我们可以按照中右左得顺序遍历得到结果数组,再将结果数组翻转得到最终结果;

由于栈满足后进先出的结构特点,故左节点的入栈顺序要在右节点之前.

// 迭代法
function postorderTraversal(root: TreeNode | null): number[] {
    let vec = []
    let st = [] // 模拟堆
    st.push(root)
    while (st.length != 0) {
        let node = st.pop()
        if (node !== null) {
            vec.push(node.val)
        } else { continue }
        if (node.left != null) st.push(node.left)
        if (node.right != null) st.push(node.right)
    }
    return vec.reverse()
};