Data structures 带子级的二叉搜索树删除程序
我不知道这个问题怎么说。基本上采取以下BST:Data structures 带子级的二叉搜索树删除程序,data-structures,tree,binary-tree,binary-search-tree,Data Structures,Tree,Binary Tree,Binary Search Tree,我不知道这个问题怎么说。基本上采取以下BST: 25 / \ 20 30 / \ / \ 18 23 27 31 / \ /\ 8 19 22 24 如果我要删除值25并在其位置旋转值20,那么将23子树附加到27或将30子树附加到24是否更有意义。我的意思不是针对这个案子,而是从更广泛的角度来看 需要明确的是,在这两种安排之间,什么是更可取的: 20 / \ 18 23
25
/ \
20 30
/ \ / \
18 23 27 31
/ \ /\
8 19 22 24
如果我要删除值25并在其位置旋转值20,那么将23子树附加到27或将30子树附加到24是否更有意义。我的意思不是针对这个案子,而是从更广泛的角度来看
需要明确的是,在这两种安排之间,什么是更可取的:
20
/ \
18 23
/ \ / \
8 19 22 24
\
30
/ \
27 31
20
/ \
18 30
/ \ / \
8 19 27 31
/
23
/ \
22 24
轮换20人不是最明智的决定。您应该将其替换为左子树的最大值或右子树的最小值
如果您确实希望按现有方式旋转,则树的高度之间没有差异,并且两者在时间复杂度方面是相同的 这样做更有意义,而且更易于实现,谢谢!这个逻辑有意义吗:1。检索左子树中的最大值(最初是左子树的根),以及最大值父节点(最初是当前子树的根)2。如果最终父节点与原始节点不同,请将该父节点的右子树设置为该节点的左子树,并在原始节点的左子树中设置最大值。3.使用原始节点左子树中的最大值将节点的值和频率/出现次数复制到原始节点。