94. Binary Tree Inorder Traversal
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.
永远渴望,大智若愚(stay hungry, stay foolish)