-- 二叉树 - 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()
};