本人在写二叉排序树的节点删除时,遇到一个问题,在网上没有找到答案,记过自己仔细排查,解决了这个问题。
首先建立一个二叉排序树,先序遍历,结果如下:
控制台显示的错误是:
需要删除的是value=10的节点,代码如下:
经过排查,发现删除节点时,少了一行代码。
那么如果没有这一行代码,为什么会报错呢?
报错的位置在定义节点类的toString()方法的位置,缺少这行的代码的作用是将要删除的节点(delNode)的右子树中最小的节点tempNode,它的父节点的左孩子置空。如若不然,将有两个位置指向该节点tempNode,从而导致该二叉树的结构混乱,toString()方法截取的字符长度溢出,程序无法通过调用toString()输出该树。