用js解答:描述 给定一个二叉树的根节点root,返回它的中序遍历结果。 数据范围:树上节点数满足 0 ≤ � ≤ 1000 0≤n≤1000,树上每个节点的值满足 − 1000 ≤ � � � ≤ 1000 −1000≤val≤1000 进阶:空间复杂度 � ( � ) O(n),时间复杂度 � ( � ) O(n) 示例1 输入: {1,2,#,#,3} 复制 返回值: [2,3,1]
时间: 2023-12-08 09:06:18 浏览: 67
可以使用递归实现中序遍历二叉树,代码如下:
```js
function inorderTraversal(root) {
const res = [];
function traverse(node) {
if (!node) return;
traverse(node.left);
res.push(node.val);
traverse(node.right);
}
traverse(root);
return res;
}
```
时间复杂度为 O(n),空间复杂度为 O(n)。其中,递归栈的空间复杂度为 O(n),存储结果的数组的空间复杂度也为 O(n)。
相关问题
给定一个二叉树的根节点 root ,返回 它的 中序遍历 。
中序遍历是二叉树的一种遍历方式,遍历顺序为:先遍历左子树,再遍历根节点,最后遍历右子树。对于给定的二叉树的根节点root,可以采用递归或者非递归的方式进行中序遍历。
递归方式:
1. 先判断根节点是否为空,若为空,则返回空列表。
2. 递归调用中序遍历函数,传入左子树的根节点,将左子树的中序遍历结果添加到列表中。
3. 将根节点的值添加到列表中。
4. 递归调用中序遍历函数,传入右子树的根节点,将右子树的中序遍历结果添加到列表中。
5. 返回列表。
非递归方式(使用栈):
1. 初始化一个空列表用于存放中序遍历结果。
2. 初始化一个空栈以及一个当前节点指针,将当前节点指针指向根节点。
3. 当当前节点指针不为空或者栈不为空时,进行循环。
a. 若当前节点指针不为空,则将当前节点入栈,将当前节点指针更新为当前节点的左子树。
b. 若当前节点指针为空,则将栈顶节点弹出,将其值加入列表中,将当前节点指针更新为当前节点的右子树。
4. 返回列表。
以上两种方式均能得到给定二叉树的中序遍历结果。
给定一个二叉树的根节点 root ,返回 它的中序遍历 。
好的,这是一个二叉树的遍历问题,可以使用递归或迭代的方式来解决。以下是使用递归方式的代码:
```
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
inorder(root, res);
return res;
}
void inorder(TreeNode* root, vector<int>& res) {
if (!root) return;
inorder(root->left, res);
res.push_back(root->val);
inorder(root->right, res);
}
};
```
这段代码可以返回给定二叉树的中序遍历结果。
阅读全文