使用临时变量实现二叉搜索树节点插入的代码问题求助
修复后的可运行代码
import sys class Node: def __init__(self, d): self.left = None self.data = d self.right = None r = None def insert(): global r d = int(input('enter data:')) if r is None: r = Node(d) return # 存储遍历过程中的父节点 parent = None t = r while t is not None: parent = t if d > t.data: t = t.right else: t = t.left # 将新节点挂到父节点的对应子节点位置 if d > parent.data: parent.right = Node(d) else: parent.left = Node(d) # 补充中序遍历display函数验证插入效果,二叉搜索树中序遍历为升序 def display(): def in_order(node): if node is None: return in_order(node.left) print(node.data, end=' ') in_order(node.right) print("当前树中序遍历结果:") in_order(r) print() # 空实现delete函数避免调用报错,可后续自行补充逻辑 def delete(): print("delete功能待实现") while True: print('1.insert') print('2.delete') print('3.display') print('4.exit') ch = int(input('enter choice:')) if ch == 1: insert() elif ch == 2: delete() elif ch == 3: display() elif ch == 4: sys.exit()
核心修复点
- 修正了原代码所有缩进错误,符合Python语法要求
- 解决插入逻辑的核心缺陷:新增
parent临时变量存储遍历过程中的父节点,循环结束后将新节点关联到父节点的left或right属性,保证新节点真正加入树结构。原代码直接给遍历到空的临时变量t赋值,只会修改临时变量指向,不会更新树的结构 - 补充了基础的中序遍历display函数、空实现delete函数,避免运行时报错,可直接测试插入功能
内容的提问来源于stack exchange,提问作者shourya kumar jha
相关产品推荐
相关产品推荐

