LeetCode:94.二叉树的中序遍历
给定一个二叉树,返回它的中序 遍历。
解析(c++):
方法一:递归
时间复杂度:O(n)
空间复杂度:O(logn)
class Solution {
public:
void mid_order(TreeNode* root, vector<int>& ret) {
if (root == NULL) {
return;
}
mid_order(root->left, ret);
ret.push_back(root->val);
mid_order(root->right, ret);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
if (!root) return ret;
mid_order(root, ret);
return ret;
}
};
方法二:栈
时间
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode *> stack1;
if (root != nullptr) stack1.push(root);
while (!stack1.empty()) {
TreeNode *t = stack1.top();
stack1.pop();
if (t != nullptr) {
if (t -> right) stack1.push(t -> right);
stack1.push(t);
stack1.push(nullptr);//nullptr作为标志
if (t -> left) stack1.push(t -> left);
} else {
res.push_back(stack1.top() -> val);
stack1.pop();
}
}
return res;
}
};