二叉树的中序遍历,用了两种方法-递归和迭代(需要用到栈)。
递归解法:
class Solution {
public:
vector< int > res;
void inorder(TreeNode* root) {
if (!root) {
return;
}
inorder(root->left);
res.push_back(root->val);
inorder(root->right);
}
vector< int > inorderTraversal(TreeNode* root) {
inorder(root);
return res;
}
};
迭代解法:
class Solution {
public:
vector< int > inorderTraversal(TreeNode* root) {
vector< int > result;
stack<TreeNode*> s;
while(!s.empty()||root!=nullptr){
while(root!=nullptr){
s.push(root);
root=root->left;
}
root=s.top();
s.pop();
result.push_back(root->val);
root=root->right;
}
return result;
}
};