递增顺序搜索树
难度:
标签:
题目描述
English description is not available for the problem. Please switch to Chinese.
代码结果
运行时间: 23 ms, 内存: 16.0 MB
/*
* 题目思路:
* 1. 使用Java Stream的API和Lambda表达式,对二叉搜索树进行中序遍历。
* 2. 将结果转换为一个只有右子节点的链表。
*/
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Solution {
public TreeNode increasingBST(TreeNode root) {
List<Integer> values = new ArrayList<>();
inorderTraversal(root, values);
TreeNode dummy = new TreeNode(0); // 虚拟根节点
TreeNode current = dummy;
for (int val : values) {
current.right = new TreeNode(val); // 生成新节点
current = current.right; // 移动到下一个节点
}
return dummy.right;
}
private void inorderTraversal(TreeNode node, List<Integer> values) {
if (node == null) return;
inorderTraversal(node.left, values); // 递归遍历左子树
values.add(node.val); // 添加节点值
inorderTraversal(node.right, values); // 递归遍历右子树
}
}
解释
方法:
此题解采用了中序遍历的方式来遍历二叉搜索树。首先,通过递归的方式对树进行中序遍历,并将遍历的结果存储在一个数组中。然后,使用这个数组来构建一个新的递增顺序搜索树,这个新树的每个节点都只有右子节点,没有左子节点。
时间复杂度:
O(n)
空间复杂度:
O(n)
代码细节讲解
🦆
在中序遍历时,如何确保所有节点都被正确访问,并且按照左-根-右的顺序输出?
▷🦆
递归函数中使用了nonlocal关键字来访问外部变量res,这种做法有什么优缺点?
▷🦆
新的递增顺序搜索树中节点只有右子节点,这种结构对搜索效率有何影响?
▷