给定一个二叉树的根节点 root ,返回 它的 中序遍历 。
时间: 2023-08-28 15:02:14 浏览: 283
中序遍历是二叉树的一种遍历方式,遍历顺序为:先遍历左子树,再遍历根节点,最后遍历右子树。对于给定的二叉树的根节点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);
}
};
```
这段代码可以返回给定二叉树的中序遍历结果。
给定一个二叉树的根节点 root ,使用java返回它的中序遍历 。
好的,以下是返回二叉树中序遍历的Java代码:
```
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) return res;
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
res.add(curr.val);
curr = curr.right;
}
return res;
}
```
这段代码使用了栈来模拟中序遍历的过程,具体实现可以参考注释。
阅读全文