二叉树先序遍历C++
时间: 2024-06-22 17:03:12 浏览: 117
在C++中,二叉树的先序遍历是一种常见的树遍历算法,按照“根-左-右”的顺序访问节点。以下是使用递归方式实现二叉树先序遍历的C++代码:
```cpp
// 假设我们有一个二叉树节点定义如下:
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 先序遍历的递归函数
void preorderTraversal(TreeNode* root) {
if (root != nullptr) {
// 访问根节点
std::cout << root->val << " ";
// 递归遍历左子树
preorderTraversal(root->left);
// 递归遍历右子树
preorderTraversal(root->right);
}
}
```
在实际使用时,你可以将`TreeNode`结构体替换为你实际的二叉树节点定义,并调用`preorderTraversal`函数传入树的根节点开始遍历。
相关问题
c++二叉树先序遍历建立二叉树
在C++中,先序遍历(Preorder Traversal)是一种常用的二叉树遍历算法,它按照“根节点 -> 左子树 -> 右子树”的顺序访问每个节点。如果你想要利用先序遍历的结果来重建一颗二叉树,可以按照以下步骤操作:
1. **获取根节点**:在先序遍历的第一个元素通常就是当前树的根节点。
2. **创建新节点**:用根节点值创建一个新的二叉树节点。
3. **递归构建左子树**:对先序遍历剩余的部分,找到第一个大于根节点的值,这通常是左子树的开始。在左子数组列中进行同样的先序遍历过程,直到遇到小于根节点的值,这意味着左子树已完整。
4. **递归构建右子树**:对于找到的左子树结束位置,右子树的遍历从下一个大于当前左子树结束位置的值开始。同样地,继续递归这个过程,直到遍历完所有节点。
以下是简单的伪代码示例:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 假设preorder是一个存储先序遍历结果的数组
TreeNode* buildTree(vector<int>& preorder) {
if (preorder.empty()) return nullptr;
// 获取根节点
TreeNode* root = new TreeNode(preorder[0]);
// 分离根节点之后的剩余部分用于左、右子树的构造
int i = 1;
while (i < preorder.size() && preorder[i] < root->val) {
i++;
}
// 递归构建左子树
root->left = buildTree(vector<int>(preorder.begin(), preorder.begin() + i));
// 递归构建右子树
if (i < preorder.size()) {
root->right = buildTree(vector<int>(preorder.begin() + i, preorder.end()));
}
return root;
}
```
二叉树先序遍历代码c++
以下是二叉树先序遍历的 C++ 代码:
```c++
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
这里定义了一个二叉树节点的结构体 `TreeNode`,包含值 `val`、左子节点 `left` 和右子节点 `right`。`preorderTraversal` 函数实现了二叉树的先序遍历,先输出当前节点的值,再遍历左子树,最后遍历右子树。在遍历空节点时,直接返回。
阅读全文