输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
要注意其中的各种空节点的情况,还有链表的最终位置
java
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeNode Convert(TreeNode pRootOfTree) {
if (pRootOfTree == null) {
return null;
}
if (pRootOfTree.left == null && pRootOfTree.right == null) {
return pRootOfTree;
}
TreeNode leftTemp = Convert(pRootOfTree.left);
TreeNode right = Convert(pRootOfTree.right);
if (leftTemp != null) {
TreeNode left = getTail(leftTemp);
left.right = pRootOfTree;
pRootOfTree.left = left;
}
if (right != null) {
right.left = pRootOfTree;
pRootOfTree.right = right;
}
if (leftTemp == null) {
return pRootOfTree;
} else {
return leftTemp;
}
}
private TreeNode getTail(TreeNode node) {
while (node.right != null) {
node = node.right;
}
return node;
}
}