LeetCode 270. 二叉搜索树中查找与目标数字最接近的节点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/faan0966/article/details/79959856

思路:如果当前节点值小于目标值,则结果只可能是当前节点值或者右子树中的值;如果当前节点值大于目标值,则结果只可能是当前节点值或者左子树中的值。

struct TreeNode{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL){}
};

TreeNode* find_nearest_node(TreeNode *pRoot, int target){
    if(pRoot == NULL || pRoot->val == target)
        return pRoot;
    if(pRoot->val > target){
        if(!pRoot->left)
            return pRoot;
        else{
            TreeNode *left_nearest = find_nearest_node(pRoot->left, target);
            return abs(left_nearest->val - target) >= abs(pRoot->val - target) ? pRoot : left_nearest;
        }
    }
    else{
        if(!pRoot->right)
            return pRoot;
        else{
            TreeNode *right_nearest = find_nearest_node(pRoot->right, target);
            return abs(right_nearest->val - target) >= abs(pRoot->val - target) ? pRoot : right_nearest;
        }
    }
}

阅读更多

没有更多推荐了,返回首页