如何实现代码量更少的最简版二叉搜索树迭代式插入
二叉搜索树迭代式插入的简洁实现优化
你的代码存在冗余逻辑,同时未处理空树的边界情况(会触发未定义行为),以下是更简洁且健壮的实现:
优化后的代码
#include <stdlib.h> typedef struct Node { int data; struct Node* left; struct Node* right; } Node; // 补充节点创建函数(原代码依赖此函数但未给出) static Node* create_node_bst(int v) { Node* node = malloc(sizeof(Node)); node->data = v; node->left = node->right = NULL; return node; } Node* insert_BST_it(Node* root, int v) { Node* node = create_node_bst(v); if (!root) return node; // 处理空树情况 Node** curr = &root; while (*curr) { // 直接跟踪要插入的子树指针,无需额外标记 curr = (v <= (*curr)->data) ? &(*curr)->left : &(*curr)->right; } *curr = node; return root; }
简化说明
- 去掉冗余标记变量:使用二级指针
Node** curr直接跟踪需要插入的位置,无需hold和left变量记录方向,逻辑更直接 - 修复空树bug:原代码未处理root为NULL的情况,优化后直接返回新创建的节点作为根
- 精简分支逻辑:用三元运算符合并循环内的分支判断,减少重复代码
- 修正语法问题:去掉原代码中多余的分号,修正变量名错误(原代码中
elm应为v)
内容的提问来源于stack exchange,提问作者Kim
相关产品推荐
相关产品推荐

