给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解析:
递归和非递归两种方法中序遍历二叉树。
代码:
//递归
/**
* 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>res;
if(root==NULL)
return res;
if(root->left)
{
vector<int>tmp;
tmp=inorderTraversal(root->left);
res.insert(res.end(),tmp.begin(),tmp.end());//拼接
}
res.push_back(root->val);
if(root->right)
{
vector<int>tmp;
tmp=inorderTraversal(root->right);
res.insert(res.end(),tmp.begin(),tmp.end());
}
return res;
}
};
他山之石:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<TreeNode *> nodes;
vector<int> res;
while (nodes.size() > 0 || root != nullptr)
{
if (root != nullptr)
{
nodes.push_back(root);
root = root->left;
}
else
{
if (nodes.size() > 0)
{
root = nodes.back();
nodes.pop_back();
res.push_back(root->val);
root = root->right;
}
}
}
return res;
}
};