题目
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]示例 2:
输入:root = [] 输出:[]示例 3:
输入:root = [1] 输出:[1]
分析
二叉树的中序遍历顺序是:先遍历左子树,然后访问根节点,最后遍历右子树。
递归法
递归是实现二叉树中序遍历最简单的方法,其基本思想是根据中序遍历的定义,递归地处理左子树、根节点和右子树。
时间复杂度:O(),
为二叉树节点的个数
空间复杂度:O(),递归调用栈的空间,最坏情况下二叉树退化为链表,递归深度为
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inorder(root, result);
return result;
}
private:
void inorder(TreeNode* node, vector<int>& result) {
if (node == nullptr) {
return;
}
// 递归遍历左子树
inorder(node->left, result);
// 访问根节点
result.push_back(node->val);
// 递归遍历右子树
inorder(node->right, result);
}
};
迭代法
迭代实现通常使用栈来模拟递归调用的过程。具体步骤如下:
- 从根节点开始,将左子树的节点依次压入栈中,直到左子树为空
- 弹出栈顶节点,访问该节点的值
- 处理该节点的右子树,重复步骤 1 和 2
时间复杂度:O(),


最低0.47元/天 解锁文章
555

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



