Data structures 如何获得最短时间?
假设我们有这棵树,我想返回我可以用特定预算得到的最小时间。示例:350,min_time=45700 min_time=201000 min_time=10,如果预算小于或大于现有价格,则返回-1。如何在O(h)运行时做到这一点,我需要的想法请Data structures 如何获得最短时间?,data-structures,binary-tree,binary-search-tree,computer-science,Data Structures,Binary Tree,Binary Search Tree,Computer Science,假设我们有这棵树,我想返回我可以用特定预算得到的最小时间。示例:350,min_time=45700 min_time=201000 min_time=10,如果预算小于或大于现有价格,则返回-1。如何在O(h)运行时做到这一点,我需要的想法请 double get_min(node * t, double budget){ } 您可以使用二进制搜索树(BST)的设计来为您带来好处 给定BST中的任何节点,右侧的所有值都大于该节点,左侧的所有值都小于该节点 您可以通过修改后的方式使用搜索功能来
double get_min(node * t, double budget){
}
您可以使用二进制搜索树(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);
}
int-largestValuelessthan(节点*根,int-N)
{
//基本情况
if(root==NULL)
返回-1;
如果(根->键==N)
返回N;
//若根的值较小,则在右子树中尝试
如果(根->键右,N);
如果(k==-1)
返回根->键;
其他的
返回k;
}
//若根的键更大,则从左子树返回值。
否则如果(根->键>N)
返回最大值lessthan(根->左,N);
}
在您的情况下,似乎需要找到最大价格低于指定预算的节点,然后添加该节点的最小时间
您没有提到如果找到所需节点后的预算足够大,可以为您提供另一个节点,那么会发生什么。您可以从预算中减去找到的节点的价格,然后再次执行相同的操作以获取另一个节点