|
Notes: |
| |
Given a binary tree, return the inorder traversal of its nodes' values. |
| |
For example: |
| |
Given binary tree {1,#,2,3}, |
| |
1 |
| |
\ |
| |
2 |
| |
/ |
| |
3 |
| |
return [1,3,2]. |
| |
Note: Recursive solution is trivial, could you do it iteratively? |
| |
|
| |
Solution: 1. Iterative way (stack). Time: O(n), Space: O(n). |
| |
2. Recursive solution. Time: O(n), Space: O(n). |
| |
3. Threaded tree (Morris). Time: O(n), Space: O(1). |
| |
*/ |
| |
/** |
| |
* Definition for binary tree |
| |
* struct TreeNode { |
| |
* int val; |
| |
* TreeNode *left; |
| |
* TreeNode *right; |
| |
* TreeNode(int x) : val(x), left(NULL), right(NULL) {} |
| |
* }; |
| |
*/ |
vector<int> inorderTraversal_1(TreeNode *root) {
vector<int> res;
stack<TreeNode *> stk;
TreeNode *cur = root;
while (cur || !stk.empty())
{
if (cur)
{
stk.push(cur);
cur = cur->left;
}
else if (!stk.empty())
{
res.push_back(stk.top()->val);
cur = stk.top()->right;
stk.pop();
}
}
return res;
}