class Node { val: number; left: Node | null; right: Node | null; constructor(val: number, left: Node | null = null, right: Node | null = null) { this.val = val; this.left = left; this.right = right; } } const root = new Node(2, new Node(1), new Node(3)); function inorderTraversal(root: Node | null): number[] { if (!root) return []; return [...inorderTraversal(root.left), root.val, ...inorderTraversal(root.right)]; } console.log(inorderTraversal(root));
Inorder traversal visits nodes in the order: left subtree, root, right subtree.
For the tree with root 2, left child 1, and right child 3, the order is 1, 2, 3.
class Node { val: number; left: Node | null; right: Node | null; constructor(val: number, left: Node | null = null, right: Node | null = null) { this.val = val; this.left = left; this.right = right; } } const root = new Node(4, new Node(2, new Node(1), new Node(3)), new Node(5)); function inorderTraversal(root: Node | null): number[] { if (!root) return []; return [...inorderTraversal(root.left), root.val, ...inorderTraversal(root.right)]; } console.log(inorderTraversal(root));
Inorder traversal visits left subtree nodes first, then root, then right subtree nodes.
For this tree, the order is 1, 2, 3, 4, 5.
class Node { val: number; left: Node | null; right: Node | null; constructor(val: number, left: Node | null = null, right: Node | null = null) { this.val = val; this.left = left; this.right = right; } } function inorderTraversal(root: Node | null): number[] { if (root === null) return []; const left = inorderTraversal(root.left); const right = inorderTraversal(root.right); return left.concat([root.val]).concat(right); } const root = new Node(1); console.log(inorderTraversal(root));
The concat method expects an array argument, but root.val is a number.
This causes a TypeError at runtime.
class Node { val: number; left: Node | null; right: Node | null; constructor(val: number, left: Node | null = null, right: Node | null = null) { this.val = val; this.left = left; this.right = right; } } const root = new Node(10, null, new Node(20, new Node(15), null)); function inorderTraversal(root: Node | null): number[] { if (!root) return []; return [...inorderTraversal(root.left), root.val, ...inorderTraversal(root.right)]; } console.log(inorderTraversal(root));
Inorder traversal visits left subtree, root, then right subtree.
Here, left of root is null, so visit root 10, then traverse right subtree which visits 15 then 20.
In inorder traversal, all nodes in the left subtree are visited before the root.
A complete binary tree of height 3 has 7 nodes in the left subtree (levels 1 and 2 fully filled).
