Data structures 如何获得最短时间?

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中的任何节点,右侧的所有值都大于该节点,左侧的所有值都小于该节点 您可以通过修改后的方式使用搜索功能来

假设我们有这棵树,我想返回我可以用特定预算得到的最小时间。示例:350,min_time=45700 min_time=201000 min_time=10,如果预算小于或大于现有价格,则返回-1。如何在O(h)运行时做到这一点,我需要的想法请

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);
}
在您的情况下,似乎需要找到最大价格低于指定预算的节点,然后添加该节点的最小时间

您没有提到如果找到所需节点后的预算足够大,可以为您提供另一个节点,那么会发生什么。您可以从预算中减去找到的节点的价格,然后再次执行相同的操作以获取另一个节点