This website contains ALL LeetCode **Premium** problems for
**FREE!!**.

All leaked interview problems are collected from Internet.

All leaked interview problems are collected from Internet.

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

For example:

Given binary tree `[1,null,2,3]`

,

1 \ 2 / 3

return `[1,3,2]`

.

**Note:** Recursive solution is trivial, could you do it iteratively?

b'

\n## Solution

\n

\n#### Approach #1 Recursive Approach [Accepted]

\n

\n#### Approach #2 Iterating method using Stack [Accepted]

\n

\n#### Approach #3 Morris Traversal [Accepted]

\n\n\n\n\n

\n

'
\n\n

\n\n

The first method to solve this problem is using recursion.\nThis is the classical method and is straightforward. We can define a helper function to implement recursion.

\n\n**Complexity Analysis**

- \n
- \n
Time complexity : . The time complexity is because the recursive function is .

\n \n - \n
Space complexity : The worst case space required is , and in the average case it\'s where is number of nodes.

\n \n

\n

The strategy is very similiar to the first method, the different is using stack.

\nHere is an illustration:

\n!?!../Documents/94_Binary.json:1000,563!?!

\n\n**Complexity Analysis**

- \n
- \n
Time complexity : .

\n \n - \n
Space complexity : .

\n \n

\n

In this method, we have to use a new data structure-Threaded Binary Tree, and the strategy is as follows:

\n\n\nStep 1: Initialize current as root

\nStep 2: While current is not NULL,

\nIf current does not have left child

\na. Add current\xe2\x80\x99s value

\nb. Go to the right, i.e., current = current.right

\nElse

\na. In current\'s left subtree, make current the right child of the rightmost node

\nb. Go to this left child, i.e., current = current.left

\n

For Example:

\n1\n / \\\n 2 3\n / \\ /\n 4 5 6\n

First, 1 is the root, so initialize 1 as current, 1 has left child which is 2, the current\'s left subtree is

\n2\n / \\\n 4 5\n

So in this subtree, the rightmost node is 5, then make the current(1) as the right child of 5. Set current = cuurent.left (current = 2).\nThe tree now looks like:

\n2\n / \\\n 4 5\n \\\n 1\n \\\n 3\n /\n 6\n

For current 2, which has left child 4, we can continue with thesame process as we did above

\n4\n \\\n 2\n \\\n 5\n \\\n 1\n \\\n 3\n /\n 6\n

then add 4 because it has no left child, then add 2, 5, 1, 3 one by one, for node 3 which has left child 6, do the same as above.\nFinally, the inorder taversal is [4,2,5,1,6,3].

\nFor more details, please check \nThreaded binary tree and \nExplaination of Morris Method

\n\n**Complexity Analysis**

- \n
- \n
Time complexity : . To prove that the time complexity is ,\nthe biggest problem lies in finding the time complexity of finding the predecessor nodes of all the nodes in the binary tree.\nIntuitively, the complexity is , because to find the predecessor node for a single node related to the height of the tree.\nBut in fact, finding the predecessor nodes for all nodes only needs time. Because a binary Tree with nodes has edges, the whole processing for each edges up to 2 times, one is to locate a node, and the other is to find the predecessor node.\nSo the complexity is .

\n \n - \n
Space complexity : . Arraylist of size is used.

\n \n

\n

Analysis written by: @monkeykingyan

\n