夏日.逍遥 2024-09-24 18:12 采纳率: 70%
浏览 1

cpp数据结构二叉树



```c++

```c++
#define maxsize 1024
typedef char datatype;
struct tree {
    datatype data;
    tree* lnext;
    tree* rnext;
};
tree* head;
tree* createtree() {
    datatype ch = 0;
    tree* arr[maxsize] = { 0 };
    int front = 1;
    int rear = 0;
    tree* p = NULL;
    tree* root = NULL;
    while ((ch = getchar()) != '\n') {
        p = (tree*)malloc(sizeof(tree));
        if (p == NULL) {
            cout << "pnode create fail!";
        }
        else {
            p->data = ch;
            p->lnext = NULL;
            p->rnext = NULL;
            rear++;
            arr[rear] = p;
        }
        if (rear == 1) {
            root = p;
        }
        else if (arr[front]) {
            if (rear % 2 == 0) {
                arr[front]->lnext = p;
            }
            else {
                arr[front]->rnext = p;
            }
            if (rear % 2 == 1) {
                front++;
            }
        }
    }
    return root;
}
void printftree_hlr(tree* root) {
    if (root != NULL) {
        cout << root->data << " ";
        printftree_hlr(root->lnext);
        printftree_hlr(root->rnext);
    }
}
void printftree_lhr(tree* root) {
    if (root != NULL) {
        printftree_lhr(root->lnext);
        cout << root->data << " ";
        printftree_lhr(root->rnext);
    }
}
void printftree_lrh(tree* root) {
    if (root != NULL) {
        printftree_lrh(root->lnext);
        printftree_lrh(root->rnext);
        cout << root->data << " ";
    }
}
void printflayer(tree* root) {
    if (root != NULL) {
        tree* brr[maxsize] = { 0 };
        tree* p = NULL;
        int front = 1;
        int rear = 0;
        brr[front] = root;
        while (front > rear) {
            rear++;
            p = brr[rear];
            cout << p->data;
            if (p->lnext != NULL) {
                front++;
                brr[front] = p->lnext;
            }
            if (p->rnext != NULL) {
                front++;
                brr[front] = p->rnext;
            }
        }
    }
}

int main() {
    head = createtree();
    cout << "先序遍历:";
    printftree_hlr(head);
    cout << endl << "==============" << endl;
    cout << "中序遍历:";
    printftree_lhr(head);
    cout << endl << "==============" << endl;
    cout << "后序遍历:";
    printftree_lrh(head);
    cout << endl << "==============" << endl;
    cout << "广度遍历:";
    printflayer(head);

    
    
}

img

二叉树。输出面板中如果输入的字符间没有空格则是正常输出的,有空格的话就像这样,这是什么问题呢?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-24 18:13
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题看起来是由于在读取输入创建二叉树时,代码尝试处理字符输入流,并在检测到换行符('\n')时停止读取。如果在字符之间有空格,这些空格也被视为有效的输入字符,因为它们被读取并存储到二叉树中。这就是为什么你在输出时看到有空格字符的原因。为了解决这个问题,你可以在读取输入时添加一些逻辑来忽略空格字符。以下是一个可能的解决方案:

    createtree 函数中修改输入处理的逻辑:

    // 其他代码不变,仅在读取字符时进行额外的检查
    while ((ch = getchar()) != '\n') {
        if (ch != ' ') { // 如果字符不是空格则进行创建节点操作
            p = (tree*)malloc(sizeof(tree));
            // 其他创建节点的代码不变...
            // 将该节点插入二叉树...
        }
    }
    

    在这个修改中,只有在 getchar() 读取到的字符不是空格时才创建新的节点并插入二叉树。这样就可以忽略空格字符,只处理有效的数据输入。当然,这也取决于你的实际需求是否允许忽略空格或其他空白字符。如果空格是数据的一部分并且需要保留,那么你可能需要采用不同的方法来处理输入数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?