C++ 使用队列创建二叉树并先序遍历验证

本文详细介绍了如何使用C++ STL的队列数据结构来创建二叉树,并提供了通过先序遍历进行验证的实现代码。学习如何通过C++队列高效构建二叉树,并使用经典的先序遍历方法进行验证。

二叉树的创建:

  1. 通过队列创建二叉树并根据先序遍历验证
#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 条留言

正在加载留言...