1. 题目描述
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
2. 基础解法
思路1:递归。
思路2:使用栈来辅助。
思路1:
class Solution {
public:
vector<int> res;
vector<int> inorderTraversal(TreeNode* root) {
dfs(root, res);
return res;
}
void dfs(TreeNode*& root, vector<int>& res){
if(!root) return;
dfs(root -> left, res);
res.push_back(root -> val);
dfs(root -> right, res);
}
};
思路2:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
if(!root) return res;
TreeNode* cur = root;
while(!st.empty() || cur){
if(cur){
st.push(cur);
cur = cur -> left;
}
else{
cur = st.top();
res.push_back(cur -> val);
st.pop();
cur = cur -> right;
}
}
return res;
}