题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
代码实现
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
//直接用中序遍历
public class Solution {
private TreeNode pre = null;//head 的 pre 节点
private TreeNode head = null;//双向链表的头节点
public TreeNode Convert(TreeNode root) {
inOrder(root);
return head;
}
private void inOrder(TreeNode node) {
if (node == null)
return;
//第一次运行时,会使最左边节点为链表第一个节点
inOrder(node.left);
node.left = pre;
if (pre != null)
pre.right = node;
pre = node;
if (head == null)
head = node;
inOrder(node.right);
}
}
本文介绍了一种不使用额外节点,仅通过调整二叉搜索树节点指针指向,将其转换为排序双向链表的方法。核心思路采用中序遍历,确保链表节点按升序排列。
1706

被折叠的 条评论
为什么被折叠?



