繁体   English   中英

删除二叉搜索树中的节点

[英]Remove the node in Binary Search Tree

如何删除所有isRemoved=true; 一种方法中的二叉搜索树中的数据? 或者两个没关系。 已经有一个 remove 方法,它标记了来自方法isRemoved=true的节点。 因此,构造函数有四种规格,它们是Type dataleftrightisRemoved 该方法可以递归地工作与否无关紧要。


我的想法是遍历所有节点,当我找到删除的 go 和删除方法并删除它然后返回并继续查看节点。 我无法实现这个想法,因为 BST 很复杂。 你们能给我一些线索吗?

首先,您需要决定如何遍历您的树(有序、前序、后序)。

然后,您将为要删除的节点处理三种不同的情况; 当节点是叶子时,当节点有一个孩子时,当同时有左孩子和右孩子时。

  • 如果节点是叶子,您可以将其移除。
  • 如果该节点有子节点,可以将该节点的子节点设置为父节点的子节点,然后删除该节点。
  • 如果节点有两个孩子,可以go 到左孩子的子树,用左子树最右边的孩子替换节点。 由于子树中最右边的节点是叶子,您可以在不重新平衡树的情况下进行替换。

遍历树,同时使用上述方法之一删除 isRemoved=true 节点,直到到达遍历中的最后一个节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM