本文主要是介绍力扣labuladong一刷day34天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
力扣labuladong一刷day34天
文章目录
- 力扣labuladong一刷day34天
- 一、230. 二叉搜索树中第K小的元素
- 二、538. 把二叉搜索树转换为累加树
一、230. 二叉搜索树中第K小的元素
题目链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst/?utm_source=LCUS&utm_medium=ip_redirect&utm_campaign=transfer2china
思路:这是一道很基础的利用二叉搜索树特性的题目,中序遍历二叉搜索树就会得到一个递增的序列,这个题直接计数相等记录下来即可
class Solution {int i = 1, value = 0;public int kthSmallest(TreeNode root, int k) {traverse(root, k);return value;}void traverse(TreeNode root, int k) {if (root == null) return;traverse(root.left, k);if (i == k) {value = root.val;}i++;traverse(root.right, k); }
}
二、538. 把二叉搜索树转换为累加树
题目链接:https://leetcode.cn/problems/convert-bst-to-greater-tree/
思路:本题让把二叉搜索树变成累加树,每个节点的值变成大于他的值与他的和,那这样做的话,中序遍历最后的位置的一个数是最大的,也就是他自身,倒数第二个数是自身值与倒数第一的和,这样我们只需要把中序遍历的顺序颠倒一下,先遍历right再遍历left,然后用一个p指针记录上一个遍历过的节点,这样就可以完成累加。
class Solution {TreeNode p = null;public TreeNode convertBST(TreeNode root) {traverse(root);return root;}void traverse(TreeNode root) {if (root == null) return;traverse(root.right);if (p == null) {p = root;}else {root.val += p.val;p = root;}traverse(root.left);}
}
这篇关于力扣labuladong一刷day34天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!