leetcode 669. Trim a Binary Search Tree

来源:互联网 发布:苹果手机淘宝拍照技巧 编辑:程序博客网 时间:2024/05/16 07:57

1.题目

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.
修剪一棵二叉搜索树,使得所有节点的值都在[L,R]范围内

Example 1:
Input:

    1   / \  0   2

L = 1
R = 2

Output:

1  \   2

Example 2:
Input:

    3   / \  0   4   \    2   /  1

L = 1
R = 3

Output:

      3     /    2     / 1

2.分析

用递归来实现。从根结点开始,
如果节点值小于L,则砍掉左子树,只留右子树,对右子树进行修剪
如果节点值大于R,则砍掉右子树,只留左子树,对左子树进行修剪
如果节点值位于[L,R]范围内,则递归,分别对左右子树进行修剪

3.代码

TreeNode* trimBST(TreeNode* root, int L, int R) {    if (root == NULL)        return root;        if (root->val > R)        return trimBST(root->left, L, R);    else if (root->val < L)        return trimBST(root->right, L, R);    else {        root->left = trimBST(root->left, L, R);        root->right = trimBST(root->right, L, R);        return root;    }}
原创粉丝点击