Data structures 删除给定BST中的根节点后,生成的二叉搜索树是什么?

Data structures 删除给定BST中的根节点后,生成的二叉搜索树是什么?,data-structures,binary-tree,binary-search-tree,Data Structures,Binary Tree,Binary Search Tree,给定BST如下所示 {10} {5} {30} {2} {7} {25} {40} {20} {50} {22} 我在实践BST删除概念时遇到了这个BST。在这里,我如何从BST上面删除根节点或10,以便删除后结果树保

给定BST如下所示

                  {10}

      {5}                       {30}

 {2}        {7}          {25}        {40}

                      {20}                {50}

                             {22}

我在实践BST删除概念时遇到了这个BST。在这里,我如何从BST上面删除根节点或10,以便删除后结果树保持BST属性?

这取决于您的平衡算法,但一种可能的表示形式是:

                  {30}

      {5}                       {25}

 {2}        {7}           {20}        {40}

                              {22}        {50}
另一个是

                  {30}

      {5}                       {25}

 {2}        {7}           {22}        {40}

                      {20}                {50}


谢谢你,保罗。你能帮我理解30是如何变成根节点的吗。是否可以在不进行任何平衡的情况下生成相同的表示?必须是根节点,因此必须将其中一个从属节点提升到根位置。我武断地选择了30个——也可能是5个。删除节点(从该节点向下)时,始终必须重新排列(如果不平衡)树。阅读AVL树了解更多细节。这实际上是第一个表示法。这里我不想平衡BST。我只想遵循删除规则,即如果节点同时具有左子树和右子树,则首先找到顺序继承者(本例中为20)10,并交换根和顺序继承者的内容。在本例中,我的根节点变为20,然后通过按顺序将父指针10调整到其后续节点来删除10。但在这种情况下,10的父节点是25,25的后续节点是30,那么我如何将25节点连接到30。我只是想知道有没有可能在不旋转的情况下删除10?
                  {30}

      {5}                       {40}

 {2}        {7}           {22}        {50}

                      {20}    {25}