【问题标题】:how get minimum time?如何获得最短时间?
【发布时间】:2020-11-27 08:57:09
【问题描述】:
假设我们有这棵树,我想返回我可以通过特定预算获得的 min_time。示例:350, min_time = 45, 700 min_time = 20, 1000 min_time =10,如果预算小于或大于现有价格,则返回-1。如何在 O(h) 运行时做到这一点,我需要想法。
double get_min(node * t, double budget){
}
【问题讨论】:
标签:
data-structures
binary-tree
binary-search-tree
computer-science
【解决方案1】:
您可以使用二叉搜索树 (BST) 的设计为您带来好处。
给定 BST 中的任何节点,右侧的所有值都大于该节点,左侧的所有值都小于该节点。
您可以通过修改后的方式使用搜索功能来查找适合您预算的节点。
int largestValueLessThanN(Node* root, int N)
{
// Base cases
if (root == NULL)
return -1;
if (root->key == N)
return N;
// If root's value is smaller, try in right subtree
else if (root->key < N) {
int k = largestValueLessThanN(root->right, N);
if (k == -1)
return root->key;
else
return k;
}
// If root's key is greater, return value from left subtree.
else if (root->key > N)
return largestValueLessThanN(root->left, N);
}
在您的情况下,您似乎需要找到价格最高且小于指定预算的节点,然后添加该节点的最短时间。
您没有提到如果找到所需节点后的预算足够大到可以让您获得另一个节点会发生什么。您可以从预算中减去找到的节点的价格,然后再次执行相同的操作来获取另一个节点。