题目描述
思路分析
二叉树遍历。
经典问题了,提供递归和非递归两种写法。
代码实现
//递归
class Solution {
public:
vector<int> ans;
vector<int> inorderTraversal(TreeNode* root) {
dfs(root);
return ans;
}
void dfs(TreeNode* u){
if(!u) return;
dfs(u->left);
ans.push_back(u->val);
dfs(u->right);
}
};
//非递归:用栈
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> stk;
while(root||stk.size()){
while(root) stk.push(root),root=root->left;
root=stk.top();
stk.pop();
ans.push_back(root->val);
root=root->right;
}
return ans;
}
};