地址:http://oj.leetcode.com/problems/binary-tree-inorder-traversal/
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?
思路:题目说了要非递归。用栈来模拟。要细心。参考代码:
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root) {
vector<int>res;
if(root)
{
stack<TreeNode*>s;
s.push(root);
while(!s.empty())
{
while(root->left)
{
s.push(root->left);
root = root->left;
}
res.push_back(root->val);
s.pop();
if(root->right)
{
root = root->right;
s.push(root);
}
else
{
while(!s.empty() && !s.top()->right)
{
res.push_back(s.top()->val);
s.pop();
}
if(!s.empty())
{
res.push_back(s.top()->val);
root = s.top()->right;
s.pop();
s.push(root);
}
}
}
}
return res;
}
};
//SECOND TRIALclass Solution {public :vector < int > inorderTraversal ( TreeNode * root ) {vector < int > ans ;stack < TreeNode *> st ;TreeNode * p = root ;while ( p ){while ( p ){st . push ( p );p = p -> left ;}if ( ! st . empty ()){while ( ! st . empty () && ! st . top () -> right ){ans . push_back ( st . top () -> val );st . pop ();}if ( st . empty ())break ;
p = st . top ();ans . push_back ( p -> val );st . pop ();p = p -> right ;}}return ans ;}};