C++ 使用队列创建二叉树并先序遍历验证
本文详细介绍了如何使用C++ STL的队列数据结构来创建二叉树,并提供了通过先序遍历进行验证的实现代码。学习如何通过C++队列高效构建二叉树,并使用经典的先序遍历方法进行验证。
- 数据结构
- 算法
二叉树的创建:
- 通过队列创建二叉树并根据先序遍历验证
#include <stdio.h>
#include <queue>
using namespace std;
struct Treenode {
char num;
Treenode* lchild;
Treenode* rchild;
};
void Gettree_sim(Treenode* &root, queue<Treenode*> &que, char data) {
Treenode* newNode = NULL;
// 创建新节点(如果不是'#')
if (data != '#') {
newNode = new Treenode;
newNode->num = data;
newNode->lchild = NULL;
newNode->rchild = NULL;
que.push(newNode); // 将新节点加入队列,以便后续添加子节点
}
// 如果是第一个字符,设置为根节点并返回
if (root == NULL) {
root = newNode;
return;
}
// 获取队列头部节点,将新节点添加为其子节点
if (!que.empty()) {
Treenode* front = que.front();
// 如果前面的节点左子节点为空,设置左子节点
if (front->lchild == NULL) {
front->lchild = newNode;
}
// 否则设置右子节点,并将父节点出队
else if (front->rchild == NULL) {
front->rchild = newNode;
que.pop(); // 左右子节点都已设置,移除队列
}
}
}
void preorder(Treenode* root) {
if (root != NULL) {
printf("%c", root->num);
preorder(root->lchild);
preorder(root->rchild);
}
else {
return;
}
}
int main() {
char data;
Treenode* root = NULL;
queue<Queuenode*> que;
queue<Treenode*> que_tree;
while (true) {
scanf("%c", &data);
if (data == '$')
break;
Gettree_sim(root, que_tree, data);
}
preorder(root);
return 0;
}
留言讨论
0 条留言
正在加载留言...