Java实现将二叉搜索树转为有序链表
给定一个二叉搜索树,我们需要将其转变为一条有序链表。在这个问题中,我们通过TreeNode类来构建一棵二叉搜索树,并返回以TreeNode类构建的有序链表。每个节点的左子树为空,只有右子树。
创建二叉树节点类
为了构建一棵二叉树结构,我们首先需要创建一个静态内部类TreeNode。该类表示一个二叉树节点,可以通过该类对象来构建二叉树。
```java
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
val;
}
}
```
算法实现
要将二叉搜索树转为有序链表,我们可以使用中序遍历的方式得到一个有序列表。因此,我们可以通过递归调用中序遍历的方法来完成转换。
```java
public TreeNode convertBSTToLinkedList(TreeNode root) {
if (root null) {
return null;
}
TreeNode prev null;
TreeNode head null;
inorder(root, prev, head);
return head;
}
private void inorder(TreeNode node, TreeNode prev, TreeNode head) {
if (node null) {
return;
}
inorder(node.left, prev, head);
if (prev null) {
head node;
} else {
prev.right node;
}
node.left null;
prev node;
inorder(node.right, prev, head);
}
```
辅助函数:打印二叉树
为了辅助测试,我们可以编写一个工具函数来前序遍历二叉树,并将其结构打印到控制台。
```java
public void printBinaryTree(TreeNode root) {
if (root null) {
return;
}
( " ");
printBinaryTree(root.left);
printBinaryTree(root.right);
}
```
本地测试
我们可以编写一个主方法来进行本地测试,观察控制台输出是否符合预期。
```java
public static void main(String[] args) {
Solution solution new Solution();
TreeNode root new TreeNode(4);
root.left new TreeNode(2);
root.right new TreeNode(5);
root.left.left new TreeNode(1);
root.left.right new TreeNode(3);
(root);
TreeNode result (root);
("
");
while (result ! null) {
( " ");
result result.right;
}
}
```
提交算法
在本地测试通过后,我们可以将算法提交到平台进行测试。确保代码能够顺利运行并通过所有测试用例。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。