题目:
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路:非迭代方法
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root)
{ vector<int> res;
stack<TreeNode *> s;
TreeNode *p = root;
while(p != NULL || !s.empty())
{
while(p != NULL)
{
s.push(p);
p = p->left;
}
if(!s.empty())
{
p = s.top();
res.push_back(p->val);
s.pop();
p = p->right;
}
}
return res;
}
};
思路2:迭代方法
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
inorder(root,res);
return res;
}
void inorder(TreeNode* p, vector<int>& res)
{
if(p!=NULL)
{
inorder(p->left,res);
res.push_back(p->val);
inorder(p->right,res);
}
}
};