js 实现二叉树中序遍历

var inorderTraversal = function (root) {
    // 迭代
    if (!root) {
        return [];
    }
    let res = [];
    let stack = [];
    while (stack.length > 0||root) {
        // 循环遍历,将所有左节点push到栈中
        while (root) {
            stack.push(root);
            root = root.left;
        }
        // 取出 stack 最后 push 进去的节点
        const node = stack.pop();
        // 返回该节点的值
        res.push(node.val);
        // 每次取值的时候,将当前节点的右节点 push 到栈中
        root = node.right;
    }
    return res;
    // 递归
    // let res = [];
    // const inorder = (node, res) => {
    //     if (!node) {
    //         return res;
    //     }
    //     inorder(node.left, res);
    //     res.push(node.val);
    //     inorder(node.right, res);
    // };
    // inorder(root, res);
    // return res;
};
// 前序遍历:根左右
// 中序遍历:左根右
// 后序遍历:左右根

中序遍历的逻辑:

先将最底部的最左边的节点的左节点输出,再输出该节点的根节点,再输出该节点的右节点

然后再依次输出最底部的节点的右节点的左跟右

顶级根节点的最底下一层的结束后,再向上一层继续遍历,直到遇到根节点,遍历输出值,再开始遍历顶层根节点的最底部节点

整体顺序就是从左至右。

 

posted @ 2022-08-30 00:45  蓓蕾心晴  阅读(212)  评论(0编辑  收藏  举报