二叉搜索树查找与目标数字最接近的节点。

typedef struct TreeNode{
int value;
struct TreeNode * left;
struct TreeNode * right;
}Node;

Node* LeftPrev = NULL;
Node* RightPrev = NULL;
Node* GetNearestNode(Node* root, int k)
{
    if(NULL == root)
    {
        return NULL;
    }
    if(k == root->value)
    {
        return root;
    }
    if(k < root->value)
    {
        LeftPrev = root;
        if(NULL != root->left)
        {
            return GetNearestNode(root->left , k);
        }
        else
        {
            if(RightPrev != NULL && k - RightPrev->value < root->value - k)
            {
                return RightPrev;
            }
            else
            {
                return root;
            }
        }
    }
    else 
    {
        RightPrev = root;
        if(NULL != root->right)
        {
            return GetNearestNode(root->right , k);
        }
        else
        {
            if(LeftPrev != NULL &&  k  - root->value  < LeftPrev->value - k)
            {
                return root;
            }
            else
            {
                return LeftPrev;
            }
        }
    }
    
}

 

posted @ 2015-04-22 09:34  zippyer  阅读(802)  评论(0编辑  收藏  举报