按照中序遍历打印二叉树C++实现
时间: 2024-11-27 22:17:02 浏览: 24
在C++中,按照中序遍历(Inorder Traversal)打印二叉树通常会采用递归的方式。以下是简单的实现:
```cpp
// 定义二叉树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 中序遍历函数
void inorderTraversal(TreeNode* root) {
if (root == nullptr) { // 如果节点为空,则直接返回
return;
}
// 首先递归遍历左子树
inorderTraversal(root->left);
// 然后访问当前节点
cout << root->val << " "; // 打印节点值
// 最后递归遍历右子树
inorderTraversal(root->right);
}
```
在这个实现中,我们首先检查根节点是否为空,如果空则直接返回。然后对左子树进行中序遍历,接着访问根节点,最后遍历右子树。这样就能保证按照“左-根-右”的顺序打印出二叉树的所有节点。
相关问题
只用中序遍历创建二叉树c++
可以使用中序遍历序列创建二叉树,具体步骤如下:
1. 定义二叉树结构体,包括左右子树指针和节点值。
2. 定义一个递归函数,输入参数为中序遍历序列和序列起始位置和结束位置的下标,输出为创建的二叉树的根节点指针。
3. 在递归函数中,首先判断起始位置是否大于结束位置,如果是则返回空指针。
4. 否则,取中间位置为根节点,创建一个新节点,并将中间位置的值赋给新节点。
5. 递归调用函数,传入左半部分序列和起始位置和中间位置的前一个位置作为参数,将返回值赋给新节点的左子树指针。
6. 递归调用函数,传入右半部分序列和中间位置的后一个位置和结束位置作为参数,将返回值赋给新节点的右子树指针。
7. 返回新节点的指针。
下面是使用C++实现的代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(vector<int>& inorder, int start, int end) {
if (start > end) {
return NULL;
}
int mid = (start + end) / 2;
TreeNode* root = new TreeNode(inorder[mid]);
root->left = buildTree(inorder, start, mid - 1);
root->right = buildTree(inorder, mid + 1, end);
return root;
}
int main() {
vector<int> inorder = {1, 2, 3, 4, 5};
TreeNode* root = buildTree(inorder, 0, inorder.size() - 1);
return 0;
}
```
二叉树中序遍历打印二叉树简单
在二叉树中,中序遍历是指先遍历该节点的左子树,然后访问该节点,最后遍历该节点的右子树。中序遍历的遍历顺序为 左-根-右。
中序遍历可以用递归或者迭代的方式实现,其中递归方法比较简单。下面是中序遍历的递归实现代码:
```c++
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
```
对于非递归的实现方法,一般使用栈来模拟递归过程。我们将二叉树中的节点压入栈中,然后依次弹出栈顶元素进行遍历,同时将其右子树和左子树压入栈中。
下面是中序遍历的非递归实现代码:
```c++
void inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
TreeNode* p = root;
while (p != NULL || !s.empty()) {
while (p != NULL) {
s.push(p);
p = p->left;
}
p = s.top();
s.pop();
cout << p->val << " ";
p = p->right;
}
}
```
阅读全文