分析
-
本题的考点:树的遍历。
-
关于树的遍历,可以参考:网址。
代码
- C++
class Solution {
public:
vector<int> inorderTraversal(TreeNode *root) {
vector<int> res;
stack<TreeNode *> stk;
while (root || stk.size()) {
while (root) {
stk.push(root);
root = root->left;
}
root = stk.top(), stk.pop();
res.push_back(root->val);
root = root->right;
}
return res;
}
};
- Java
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<>();
Deque<TreeNode> stk = new ArrayDeque<>();
while (root != null || !stk.isEmpty()) {
while (root != null) {
stk.push(root);
root = root.left;
}
root = stk.pop();
res.add(root.val);
root = root.right;
}
return res;
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为树中节点数。 -
空间复杂度:$O(n)$。