You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按字母序排序的二叉搜索树插入后中序遍历重复输出相同单词排查

问题根因

你的insert函数逻辑是正确的,错误出在create_node函数和指针使用逻辑上:

  • 创建节点时,你先为temp->data申请了独立的堆内存,紧接着执行temp->data = val,直接将节点的字符串指针指向了main函数中唯一的输入缓冲区element,刚申请的堆空间被直接遗弃。
  • 所有树节点的data指针最终都指向同一块内存地址,每次scanf输入新单词都会覆盖这块内存的内容,因此中序遍历时所有节点都会输出最新输入的同一个单词。
修复方案

将create_node中的指针赋值替换为字符串拷贝,把输入的内容复制到节点独立申请的堆空间中即可,修改后的函数代码如下:

tree_node* create_node(char* val) {
  tree_node* temp;
  temp = (tree_node*)malloc(sizeof(tree_node));
  temp->data = malloc(sizeof(char) * MAX);
  // 替换原有的指针赋值操作为字符串拷贝
  strcpy(temp->data, val);
  temp->left = NULL;
  temp->right = NULL;

  return temp; 
}
额外优化建议
  • 可增加退出输入的判断逻辑,避免无限循环,比如输入quit时终止程序。
  • 程序退出前遍历二叉树释放所有节点的data和节点本身的内存,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Dummy0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:45:00