Given a binary tree, return the inorder traversal of its nodes' values.
Example:
Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
Approach #1: recurisive.
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
helper(root, ans);
return ans;
}
private:
void helper(TreeNode* root, vector<int>& ans) {
if (root != NULL) {
if (root->left != NULL) {
helper(root->left, ans);
}
ans.push_back(root->val);
if (root->right != NULL) {
helper(root->right, ans);
}
}
}
};
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Binary Tree Inorder Traversal.
Approach #2: Iteration with stack.[Java]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList< > ();
Stack<TreeNode> stack = new Stack< > ();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
res.add(curr.val);
curr = curr.right;
}
return res;
}
}
Runtime:
1 ms, faster than 60.30% of Java online submissions for Binary Tree Inorder Traversal.
Approach #3: Morris Traversal.[python]
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
curr = root
while curr:
if not curr.left:
res.append(curr.val)
curr = curr.right
else:
pre = curr.left
while pre.right:
pre = pre.right
pre.right = curr
temp = curr
curr = curr.left
temp.left = None
return res
Runtime: 24 ms, faster than 40.09% of Python online submissions for Binary Tree Inorder Traversal.