669.修剪二叉搜索树
题目链接:力扣
看见题目的第一想法:
第一眼看有一点思路,但没有很好的实现方法,看了题解晓得了怎么去好好的实现代码
class Solution { public: TreeNode* traversal(TreeNode* root, int low, int high) { if(root == NULL) return NULL; if(root->val < low) { TreeNode* right = traversal(root->right, low, high); return right; } if(root->val > high) { TreeNode* left = traversal(root->left, low, high); return left; } root->left = traversal(root->left, low, high); root->right = traversal(root->right, low, high); return root; } TreeNode* trimBST(TreeNode* root, int low, int high) { // 递归法 return traversal(root, low, high); } };
遇到的困难:
应该在想想实现方法的,不应该直接去看视频
108.将有序数组转换为二叉搜索树
题目链总结:接:力扣
class Solution { public: TreeNode* traversal(vector<int>& nums, int left, int right) { if(left >= right) return NULL; int mid = left + (right - left) / 2; TreeNode* node = new TreeNode(nums[mid]); node->left = traversal(nums, left, mid); node->right = traversal(nums, mid+1, right); return node; } TreeNode* sortedArrayToBST(vector<int>& nums) { // 递归法(左闭右开) return traversal(nums, 0, nums.size()); } };
538.把二叉搜索树转换为累加树
题目链接:力扣
看到题目第一想法:
之前对累加数不太了解,了解了之后在结合数组的累加法与二叉搜索树的特性就就很好的能够解决了
class Solution { private: int sum; void traversal(TreeNode* root) { if(root == NULL) return; traversal(root->right); root->val += sum; sum = root->val; traversal(root->left); return; } public: TreeNode* convertBST(TreeNode* root) { // 根据二叉搜索树中序遍历为有序数组来解决 sum = 0; traversal(root); return root; } };
遇到的困难:
对数据结构的不理解把,还有遇到新问题不能很好的联想在一起
二叉树总结:
二叉树章节顺利完结,这几天一直走人户也是耽搁了做题的时间,最终也还好补回来了,这次刷二叉树收获非常大,果然二刷三刷是有好处的,一刷的时候真的不能理解为什么要这样,都是依葫芦画瓢,现在了解这种数据结构了之后才能懂得其中的奥妙,继续加油!!!