leetcode刷题-二叉树08

2024-08-31 00:20
文章标签 leetcode 二叉树 刷题 08

本文主要是介绍leetcode刷题-二叉树08,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码随想录二叉树part08|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

    • 669. 修剪二叉搜索树
    • 108.将有序数组转换为二叉搜索树
    • 538.把二叉搜索树转换为累加树
    • 二叉树总结

669. 修剪二叉搜索树

代码随想录文档讲解
LeetCode

思路:

如果当前节点的值小于下边界,继续遍历其右孩子
如果当前节点的值大于上边界,继续遍历其左孩子

伪代码c++

TreeNode* traversal(root, low, high){if(root==NULL) return NULL;if(root->val < low){	right =  traversal(root->right, low, right);return right;}if(root->val > hig){left = traversal(root->left, low, right);return left;}root->left = traversal(root->left, low, high);root->right = traversal(root->right, low, hight);return root;
}

python代码

class Solution:def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:if not root:return rootif root.val < low:root.right = self.trimBST(root.right, low, high)return root.rightelif root.val > high:root.left = self.trimBST(root.left, low, high)return root.leftroot.left = self.trimBST(root.left, low, high)root.right = self.trimBST(root.right, low, high)return root

108.将有序数组转换为二叉搜索树

leetcode题目链接
代码随想录文档讲解

思路

题目要求:平衡二叉树

选取一个中间节点(左区间和右区间节点数量相同,平衡二叉树),将数组分为左区间和右区间,递归遍历左区间和右区间,分别构造子树。

伪代码(C++)

// 区间的定义,左闭右闭
TreeNode* traversal(vector<int>&nums, left, right){if(left > right) return NULL; //非法区间 return mid = (left + right)/2;TreeNode* root = new TreeNode(nums[mid]);root->left = traversal(nums,left, mid-1);root->right = traversal(nums, mid+1, right);return root;
}
root = traversal(nums, 0, nums.size-1);

python代码

class Solution:def traversal(self, nums, left, right):if left > right:return Nonemid = left + (right - left) // 2root = TreeNode(nums[mid])root.left = self.traversal(nums, left, mid-1)root.right = self.traversal(nums, mid+1, right)return root def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:return self.traversal(nums, 0, len(nums)-1)

538.把二叉搜索树转换为累加树

leetcode题目链接
代码随想录文档讲解

思路

二叉搜索树 左中右(中序)遍历得到一个有序数组
这里要倒序遍历,就是右中左

把当前节点与前一个节点的值相加,数组中可用双指针,
这里也可以用 双指针

伪代码(C++)

int pre=0;
void traversal(TreeNode* cur){if(cur==NULL) return;traversal(cur->right);  // 右cur->val += pre;  /中pre = cur->val;traversal(cur->left);  // 左
}

python代码

class Solution:def traversal(self, cur):if not cur:returnself.traversal(cur.right)cur.val = cur.val + self.preself.pre = cur.valself.traversal(cur.left)def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:self.pre = 0self.traversal(root)return root

二叉树总结

链接

这篇关于leetcode刷题-二叉树08的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122357

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl