Tcdian / keep

今天不想做,所以才去做。
MIT License
5 stars 1 forks source link

145. Binary Tree Postorder Traversal #334

Open Tcdian opened 3 years ago

Tcdian commented 3 years ago

145. Binary Tree Postorder Traversal

给定一个二叉树,返回它的 后序 遍历。

Example 1

Input: root = [1,null,2,3]
Output: [3,2,1]

Example 2

Input: root = []
Output: []

Example 3

Input: root = [1]
Output: [1]

Example 4

Input: root = [1,2]
Output: [2,1]

Example 5

Input: root = [1,null,2]
Output: [2,1]

Note

Tcdian commented 3 years ago

Solution

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function(root) {
    if (root === null) {
        return [];
    }
    const queue = [];
    let patrol = root;
    const result = [];
    while (patrol !== null || queue.length !== 0) {
        while (patrol !== null) {
            queue.push([patrol, 0]);
            patrol = patrol.left;
        }
        let pair = queue.pop();
        if (pair[1] === 1) {
            result.push(pair[0].val);
        } else {
            pair[1] += 1;
            queue.push(pair);
            patrol = pair[0].right;
        }
    }
    return result;
};
/**
 * 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)
 *     }
 * }
 */

function postorderTraversal(root: TreeNode | null): number[] {
    if (root === null) {
        return [];
    }
    const queue: [TreeNode, number][] = [];
    let patrol: TreeNode | null = root;
    const result: number[] = [];
    while (patrol !== null || queue.length !== 0) {
        while (patrol !== null) {
            queue.push([patrol, 0]);
            patrol = patrol.left;
        }
        let pair = queue.pop()!;
        if (pair[1] === 1) {
            result.push(pair[0].val);
        } else {
            pair[1] += 1;
            queue.push(pair);
            patrol = pair[0].right;
        }
    }
    return result;
};