leetcode 669. Trim a Binary Search Tree

来源:互联网 发布:win10装mac虚拟机 编辑:程序博客网 时间:2024/04/30 01:15

Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.

Example 1:    Input:             1           / \          0   2      L = 1      R = 2    Output:         1          \           2

题目大致意思就是给定一个二叉树和一个范围L和R,让你返回所有元素在范围内的二叉树。
解决思路:

  • 首先,如果该节点是空的就返回空的。
  • 然后,如果该节点比L还要小,那肯定让该节点和它的右节点里面找。 反之,如果该节点比R还要大,那跟它的左节点里找。
  • 上面都不是,那这个节点肯定是在范围了,所以它的左节点就从它的左节点里找,右节点从它的右节点里找。代码用递归可以实现。

代码如下:

 /** * Definition for a binary tree node. * struct TreeNode { *     int val; *     struct TreeNode *left; *     struct TreeNode *right; * }; */struct TreeNode* trimBST(struct TreeNode* root, int L, int R) {    if (root == NULL)        return NULL;    if (root->val < L)        return trimBST(root->right, L, R);    if (root->val > R)        return trimBST(root->left, L, R);    root->left = trimBST(root->left, L, R);    root->right = trimBST(root->right, L, R);    return root;}
原创粉丝点击