# 二叉树的创建:

  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;
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

尘落 微信支付

微信支付

尘落 支付宝

支付宝

尘落 贝宝

贝宝