cheatsheet1999 / FrontEndCollection

Notes for Fullstack Software Engineers. Covers common data structure and algorithms, web concepts, Javascript / TypeScript, React, and more!

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Binary Tree Inorder Traversal

cheatsheet1999 opened this issue · comments

Given the root of a binary tree, return the inorder traversal of its nodes' values.

Screen Shot 2021-09-07 at 11 00 18 PM

Screen Shot 2021-09-07 at 11 00 47 PM

Recursive Solution

var inorderTraversal = function(root, res = []) {
    if(!root) return [];
    if(root.left) root.left = inorderTraversal(root.left, res);
    res.push(root.val);
    if(root.right) root.right = inorderTraversal(root.right, res);
    return res;
}

O(n) iterative solution is awesome!

/*
As long as there is root or stack has length, we loop over. 
In the loop, if there is a root, we push root into stack and go see the left, 
until there is no root on left subtree,  then we find the nearest last root,
and put it into stack, then loop the right subtree.
*/
var inorderTraversal = function(root) {
    let stack = [];
    let res = [];
    while(root || stack.length) {
        if(root) {
            stack.push(root);
            root = root.left;
        } else {
            //find the nearst root
            root = stack.pop();
            res.push(root.val);
            root = root.right;
        }
    }
    return res
}