递归版:
class Solution {
public:
vector<int> res;
//得到以root为根节点的中序遍历
void traverse(TreeNode *root){
if(root == NULL){
return;
}
traverse(root->left);
res.push_back(root->val);
traverse(root->right);
}
vector<int> inorderTraversal(TreeNode *root) {
// write your code here
traverse(root);
return res;
}
};非递归版:
class Solution{
public:
vector<int> preorder Traversal(TreeNode *root){
vector<int> res;
if(root == NULL)
return res;
stack<TreeNode*> s;
s.push(root);
while(!s.empty()){
TreeNode *node = s.top();
s.pop();
res.push_back(node->val);
if(node->right != NULL)
s.push(node->right);
if(node->left != NULL)
s.push(node->left);
}
return res;
}
}
本文介绍了二叉树的两种遍历方法:递归和非递归方式实现的中序遍历。递归版本简洁直观,而非递归版本使用栈来模拟递归过程,适用于需要避免深度递归的应用场景。
329

被折叠的 条评论
为什么被折叠?



