二叉搜索树与双向链表
题目详情
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
详解
二叉搜索树的中序遍历即为有序。
head.right = pRootOfTree;
pRootOfTree.left =head;
head = pRootOfTree;
将根节点放在左子树的右边,根节点比左子树大。双向的,将左子树放在根节点左边。
TreeNode head = null;
TreeNode realhead = null;
放在最上面,因为内置函数需要调用,放到主函数里面是局部变量。
realhead
先遍历左子树再是右子树
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
TreeNode head = null;
TreeNode realhead = null;
public TreeNode Convert(TreeNode pRootOfTree) {
Convert2(pRootOfTree);
return realhead;
}
public void Convert2(TreeNode pRootOfTree){
if (pRootOfTree == null){
return;
}
Convert2(pRootOfTree.left);
if (head == null){
head = pRootOfTree;
realhead =pRootOfTree;
}else{
head.right = pRootOfTree;
pRootOfTree.left =head;
head = pRootOfTree;
}
Convert2(pRootOfTree.right);
}
}

浙公网安备 33010602011771号