Given a binary tree, return the inorder traversal of its nodes’ values.
1
\
2
/
3
return [1,3,2].
题意就是给一个二叉树,然后返回其中序遍历的结果。
用递归其实非常简单,代码如下:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> re;
if(root==NULL)
{
return re;
}
inorderCore(root,re);
return re;
}
void inorderCore(TreeNode *root, vector<int> &re)
{
if(root==NULL)
{
return ;
}
if(root->left)//先左子树
{
inorderCore(root->left,re);
}
re.push_back(root->val); //父节点加入到结果
if(root->right) //再右子树
{
inorderCore(root->right,re);
}
}
};
如果不用递归的话,就必须借助栈来完成先进后出的工作。从根节点开始,先向左遍历,当为空的时候,推出栈顶,加入到re里面,然后再看该栈顶的节点是否有右子节点,加入到栈里面。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> re;
if(root==NULL)
{
return re;
}
stack<TreeNode *> s;
TreeNode *tmp=root;
while(tmp||s.empty()==false)
{
if(tmp)//用深度优先搜索的思想
{
s.push(tmp);
tmp=tmp->left;
}
else//左子树如果是空的话,则该节点就是当前最左节点
{
tmp=s.top();
re.push_back(tmp->val);
s.pop();
tmp=tmp->right;
}
}
return re;
}
};