用c++编写一段用先序遍历算法建立一个二叉树的完整代码
时间: 2023-09-10 07:15:40 浏览: 99
好的,下面是用 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 表示,然后用先序遍历算法建立二叉树,并返回根节点指针。
相关问题
在Dev-C++中先按先序遍历建立一棵二叉树,再编写交换左右子树和统计叶子结点个数的算法程序,利用struct BiTNode
来表示二叉树节点。
好的,我会尽力回答你的问题。以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
char data;
struct BiTNode* lchild;
struct BiTNode* rchild;
} BiTNode, *BiTree;
// 先序遍历建立二叉树
void CreateBiTree(BiTree* T) {
char c;
scanf("%c", &c);
if (c == ' ') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = c;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
// 交换左右子树
void SwapChild(BiTree T) {
if (T == NULL) {
return;
}
BiTree temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
SwapChild(T->lchild);
SwapChild(T->rchild);
}
// 统计叶子节点个数
int CountLeaf(BiTree T) {
if (T == NULL) {
return 0;
} else if (T->lchild == NULL && T->rchild == NULL) {
return 1;
} else {
return CountLeaf(T->lchild) + CountLeaf(T->rchild);
}
}
int main() {
BiTree T;
printf("请输入先序遍历序列,空格表示空节点:\n");
CreateBiTree(&T);
printf("交换左右子树前的先序遍历序列为:\n");
printf("%c ", T->data);
SwapChild(T);
printf("\n交换左右子树后的先序遍历序列为:\n");
printf("%c ", T->data);
printf("\n叶子节点个数为:%d\n", CountLeaf(T));
return 0;
}
```
你可以将这段代码复制到 Dev-C++ 中运行,输入先序遍历序列,空格表示空节点,即可得到交换左右子树后的先序遍历序列和叶子节点个数。
写一段C++代码,要求如下【问题描述】编写先序遍历的非递归算法,显示二叉树的先序序列 【输入形式】AB##C## 【输出形式】ABC 【样例输入】AB##C## 【样例输出】ABC
以下是代码实现:
```c++
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(nullptr), right(nullptr) {}
};
void preOrder(TreeNode* root) {
if (root == nullptr) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* curr = s.top();
s.pop();
cout << curr->val;
if (curr->right != nullptr) {
s.push(curr->right);
}
if (curr->left != nullptr) {
s.push(curr->left);
}
}
}
int main() {
string input;
cin >> input;
int n = input.size();
stack<TreeNode*> s;
TreeNode* root = new TreeNode(input[0]);
s.push(root);
for (int i = 1; i < n; i++) {
TreeNode* curr = s.top();
if (input[i] == '#') {
s.pop();
} else {
TreeNode* node = new TreeNode(input[i]);
if (curr->left == nullptr) {
curr->left = node;
} else {
curr->right = node;
}
s.push(node);
}
}
preOrder(root);
return 0;
}
```
首先输入一个字符串,代表二叉树的先序遍历序列。通过栈的方式构建二叉树,然后进行非递归的先序遍历,输出先序序列。
阅读全文