用c++编写一段用先序遍历算法建立一个二叉树的完整代码
时间: 2023-09-10 19:15:40 浏览: 44
好的,下面是用 C++ 编写的完整代码,可以用先序遍历算法建立一个二叉树:
```cpp
#include<iostream>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v): val(v), left(NULL), right(NULL) {}
};
TreeNode* buildTree(){
int val;
cin >> val;
if(val == -1) // 空节点
return NULL;
TreeNode* root = new TreeNode(val);
root->left = buildTree();
root->right = buildTree();
return root;
}
int main(){
cout << "请输入二叉树的先序遍历序列(空节点用-1表示):" << endl;
TreeNode* root = buildTree();
return 0;
}
```
这个程序可以接受用户输入二叉树的先序遍历序列,其中空节点用 -1 表示,然后用先序遍历算法建立二叉树,并返回根节点指针。
相关问题
用c++编写一段用中序遍历算法建立一个二叉树的完整代码
下面是用中序遍历算法建立一个二叉树的完整代码:
```c++
#include<iostream>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v): val(v), left(NULL), right(NULL) {}
};
TreeNode* buildTree(int* inorder, int left, int right){
if(left > right) // 递归终止条件
return NULL;
int mid = left + (right - left) / 2; // 取中间元素为根节点
TreeNode* root = new TreeNode(inorder[mid]);
root->left = buildTree(inorder, left, mid - 1); // 构建左子树
root->right = buildTree(inorder, mid + 1, right); // 构建右子树
return root;
}
int main(){
int n;
cout << "请输入二叉树节点个数:" << endl;
cin >> n;
int* inorder = new int[n];
cout << "请输入二叉树的中序遍历序列:" << endl;
for(int i = 0; i < n; i++){
cin >> inorder[i];
}
TreeNode* root = buildTree(inorder, 0, n - 1);
return 0;
}
```
该代码中,使用递归的方式来构建二叉树,递归终止条件是left > right,即没有节点需要构建。每次递归中,取中间元素为根节点,然后递归构建左子树和右子树。最终返回根节点。用户需要输入二叉树节点个数和中序遍历序列,程序会根据中序遍历序列构建对应的二叉树。
请用C语言写一个程序,使用先序遍历算法建立一棵二叉树,需要完整的可以运行的代码
好的,以下是使用先序遍历算法建立一棵二叉树的C语言完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树的结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 先序遍历算法建立二叉树
struct TreeNode* createTree() {
int val;
scanf("%d", &val);
if (val == -1) {
return NULL;
}
struct TreeNode* root = (struct TreeNode*) malloc(sizeof(struct TreeNode));
root->val = val;
root->left = createTree();
root->right = createTree();
return root;
}
// 先序遍历算法遍历二叉树
void preorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
int main() {
struct TreeNode* root = createTree();
printf("先序遍历结果为:");
preorderTraversal(root);
return 0;
}
```
在代码中,我们通过结构体 `TreeNode` 定义了二叉树的结构,包括值 `val` 和左右子节点 `left` 和 `right`。`createTree` 函数使用递归的方式先序遍历输入二叉树的节点值,如果该节点值为 `-1` 则返回 `NULL` 表示该节点为空。`preorderTraversal` 函数使用递归的方式先序遍历二叉树,并输出节点值。在 `main` 函数中,我们调用 `createTree` 函数建立二叉树,然后调用 `preorderTraversal` 函数遍历二叉树并输出结果。
注意:在输入节点值时,如果要输入负数作为节点值,需要在前面加上一个负号,例如 `-1` 表示空节点。