Java實現(xiàn)將二叉搜索樹轉為有序鏈表
給定一個二叉搜索樹,我們需要將其轉變?yōu)橐粭l有序鏈表。在這個問題中,我們通過TreeNode類來構建一棵二叉搜索樹,并返回以TreeNode類構建的有序鏈表。每個節(jié)點的左子樹為空,只有右子樹。創(chuàng)建二叉樹
給定一個二叉搜索樹,我們需要將其轉變?yōu)橐粭l有序鏈表。在這個問題中,我們通過TreeNode類來構建一棵二叉搜索樹,并返回以TreeNode類構建的有序鏈表。每個節(jié)點的左子樹為空,只有右子樹。
創(chuàng)建二叉樹節(jié)點類
為了構建一棵二叉樹結構,我們首先需要創(chuàng)建一個靜態(tài)內部類TreeNode。該類表示一個二叉樹節(jié)點,可以通過該類對象來構建二叉樹。
```java
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
val;
}
}
```
算法實現(xiàn)
要將二叉搜索樹轉為有序鏈表,我們可以使用中序遍歷的方式得到一個有序列表。因此,我們可以通過遞歸調用中序遍歷的方法來完成轉換。
```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);
}
```
輔助函數(shù):打印二叉樹
為了輔助測試,我們可以編寫一個工具函數(shù)來前序遍歷二叉樹,并將其結構打印到控制臺。
```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;
}
}
```
提交算法
在本地測試通過后,我們可以將算法提交到平臺進行測試。確保代碼能夠順利運行并通過所有測試用例。