请别走,一定要看。
方法1:基本回溯,面试官会问你还有什么想法(第二次字节面试,一面算法面就问的这个)
方法2:回溯(想了一会,想起来做过编译原理的代码,分析法中说过回溯都可以转化为栈,然后想出来了)
方法3:Morris 中序遍历(暂时没准备看)
直接使用栈:
第一次写成了先序遍历。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
s.push(root);
vector<int> v;
while(!s.empty())
{
root=s.top();
s.pop();
v.push_back(root->val);
if(root->left!=NULL) s.push(root->left);
if(root->right!=NULL) s.push(root->right);
}
return v;
}
};
中序遍历:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
vector<int> v;
while(root!=NULL||s.size()!=0)
{
while(root!=NULL)
{
s.push(root);
root=root->left;
}
root=s.top();
s.pop();
v.push_back(root->val);
root=root->right;
}
return v;
}
};