leetcode: 669. Trim a Binary Search Tree
来源:互联网 发布:淘宝卖家回复差评用语 编辑:程序博客网 时间:2024/06/04 17:54
题目解析:
题目链接:https://leetcode.com/problems/trim-a-binary-search-tree/description/
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,修剪该二叉树使得其所有元素都在[L,R]区间里。你可能需要修改二叉树的根,所以结果必须返回修剪后二叉树的新根。
Example 1:
Input: 1 / \ 0 2 L = 1 R = 2Output: 1 \ 2
Example 2:
Input: 3 / \ 0 4 \ 2 / 1 L = 1 R = 3Output: 3 / 2 / 1解题思路:
我做这类题目时偏好于新建一棵树,将符合条件的节点赋给新树。因此,遍历原树,如果节点符合边界条件,就赋给新树,如果不符合,就接着遍历,并且新树不参与遍历。
代码如下:
void trim(treeNode* root, treeNode* &root1, int L, int R){if (!root)return;if (root->val >= L&&root->val <= R){root1 = new treeNode;root1->val = root->val;trim(root->left, root1->left, L, R);trim(root->right, root1->right, L, R);}else{if (root->left){trim(root->left, root1, L, R);}if (root->right){trim(root->right, root1, L, R);}}}treeNode* trimBST(treeNode* root, int L, int R) {treeNode* root1;trim(root, root1, L, R);return root1;}
网上有人给出了在原树直接操作的代码,我贴上来学习一下。自己代码的不足在于没考虑二叉搜索树节点值之间的大小关系。简洁代码的思路是如果节点值在边界范围内,就把问题递归到左右子树。如果节点值root->val>R那么由于二叉树右子树所有节点值都比根节点大,因此,把整个右子树舍弃。如果节点值root->val<L,由于二叉树左子树所有节点值都比根节点小,因此,把整个右子树舍弃。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* trimBST(TreeNode* root, int L, int R) { if(root == NULL) return NULL; if(root->val > R) return trimBST(root->left, L, R); if(root->val < L) return trimBST(root->right, L, R); root->left = trimBST(root->left, L, R); root->right = trimBST(root->right, L, R); return root; }};
阅读全文
0 0
- leetcode 669. Trim a Binary Search Tree
- leetcode 669. Trim a Binary Search Tree
- leetcode 669. Trim a Binary Search Tree
- LeetCode 669. Trim a Binary Search Tree
- leetcode 669. Trim a Binary Search Tree
- leetcode: 669. Trim a Binary Search Tree
- <LeetCode>669. Trim a Binary Search Tree
- leetcode 669. Trim a Binary Search Tree
- LeetCode 669. Trim a Binary Search Tree
- [LeetCode] 669.Trim a Binary Search Tree
- [LeetCode] 669.Trim a Binary Search Tree
- 【LeetCode】669 Trim a Binary Search Tree
- Trim a Binary Search Tree(leetcode)
- leetcode- Add to List 669. Trim a Binary Search Tree
- 【LeetCode】669.Trim a Binary Search Tree解题报告
- LeetCode 669. Trim a Binary Search Tree (Easy)
- 669. Trim a Binary Search Tree
- 669. Trim a Binary Search Tree
- (二)从JSP说起
- 最大连续子序列最大和的四种解法
- 【广告算法工程师入门 13】机制设计-私人价值模型下四种拍卖形式的报价策略与均衡分析
- [BZOJ]2144: 跳跳棋 二分+LCA
- hibernate-mysql中hql语句的表名首字母大写其他小写?并不是这样的
- leetcode: 669. Trim a Binary Search Tree
- 构建者(Builder)模式
- 【unity小技巧之八】MonoDevelop突然不能复制粘贴了
- GYM 100801C Concatenation【思维】
- 51nod 1535 深海探险
- float和“零值”比较
- 你真的会写文章吗?
- VHDL加法器
- 麻将和牌解析算法——Java实现