题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
代码
/** 递归:中序遍历 右 中 左 */
public class Solution {
TreeNode list = null;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return pRootOfTree;
Convert(pRootOfTree.right);
if(list == null){
list = pRootOfTree;
} else {
list.left = pRootOfTree;
pRootOfTree.right = list;
list = pRootOfTree;
}
Convert(pRootOfTree.left);
return list;
}
}
/** 非递归 */
import java.util.Stack;
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null) return pRootOfTree;
TreeNode list = null;
Stack<TreeNode> s = new Stack<>();
while(pRootOfTree != null || !s.isEmpty()){
if(pRootOfTree != null) {
s.push(pRootOfTree);
pRootOfTree = pRootOfTree.right;
} else {
pRootOfTree = s.pop();
if(list == null)
list = pRootOfTree;
else {
list.left = pRootOfTree;
pRootOfTree.right = list;
list = pRootOfTree;
}
pRootOfTree = pRootOfTree.left;
}
}
return list;
}
}
本文介绍如何将二叉搜索树转换为排序的双向链表,通过中序遍历(递归与非递归)调整节点指针,实现不创建新节点的目标。代码示例使用Java实现。
396

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



