【发布时间】:2011-11-11 07:48:39
【问题描述】:
假设在给定的二叉树中如果每个节点包含多个子元素,那么在树中找到第 k 个最小元素的最佳方法是什么?
请注意,这不是常规的 BST。每个节点都包含其下的子元素数量。
【问题讨论】:
-
绝对不是功课。 @Skizz,我想给你看一次我的办公室徽章。 :)
标签: algorithm binary-tree binary-search-tree
假设在给定的二叉树中如果每个节点包含多个子元素,那么在树中找到第 k 个最小元素的最佳方法是什么?
请注意,这不是常规的 BST。每个节点都包含其下的子元素数量。
【问题讨论】:
标签: algorithm binary-tree binary-search-tree
find_element(root, k)
if(root.left.nchildren + 1 == k - 1)
return root;
if(root.left.nchildren + 1 >= k)
return find_element(root.left, k)
else
return find_element(root.right, k - (root.left.children + 1))
【讨论】:
each node contains number of child elements。这包括右子树。如果您正在查找具有 n 个元素的完整二叉树中的第 n 个元素,此算法将错误地返回根。
这是我得到的:
find (root, k)
{
leftChildCount = root->left->n
rightChildCount = root->right->n
if (leftChildCount+1 == k)
Print root node
else if (k< leftChildCount)
Find(root->left,k)
else
Find(root->right,k-leftChildCount)
}
【讨论】:
以InOrder遍历方式遍历BST,并将元素存入数组。你的数组是一个排序数组。
【讨论】: