두 갈래 나무의 Ceil 값 찾기

1431 단어
두 갈래 나무와 한 개의 수치를 주고 두 갈래 나무 중 이 수치보다 큰 가장 작은 값(즉 Ceil 값)을 찾아라.
코드는 다음과 같습니다.
#include <stdio.h>
#include <stdlib.h>
 
/* A binary tree Node has key, left child and right child */
struct Node
{
    int key;
    Node* left;
    Node* right;
    Node(int k, Node* l, Node* r): key(k), left(l), right(r){};
};
 
// Function to find ceil of a given input in BST. If input is more
// than the max key in BST, return -1
int Ceil(Node *root, int input)
{
    // Base case
    if( root == NULL )
        return -1;
 
    // We found equal key
    if( root->key == input )
        return root->key;
 
    // If root's key is smaller, ceil must be in right subtree
    if( root->key < input )
        return Ceil(root->right, input);
 
    // Else, either left subtree or root has the ceil value
    int ceil = Ceil(root->left, input);
    return (ceil >= input) ? ceil : root->key;
}
 
// Driver program to test above function
int main()
{
    Node* n1 = new Node(1, NULL, NULL);
    Node* n3 = new Node(3, NULL, NULL);
    Node* n2 = new Node(2, n1, n3);
    Node* n5 = new Node(5, NULL, NULL);
    Node* n4 = new Node(4, n2, n5);
  /* Constructed binary tree is  
            4  
          /   \  
        2      5  
      /  \  
    1     3  
  */    
    for(int i = 1; i < 7; i++)
        printf("%d  %d
", i, Ceil(n4, i)); return 0; }

좋은 웹페이지 즐겨찾기