题目:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
1.利用递归思想,分别寻找当前节点的左边节点和右边节点
2.寻找当前节点的左边节点时,最后的连接节点是当前节点左子节点树的最右节点
3.最后若当前节点左节点存在,则返回左节点,否则返回当前节点
代码:
/*
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode (int x)
{
val = x;
}
}*/
class Solution
{
public TreeNode Convert(TreeNode pRootOfTree)
{
// write code here
if(pRootOfTree == null)
return null;
if(pRootOfTree.left == null && pRootOfTree.right==null)
return pRootOfTree;
TreeNode left = Convert(pRootOfTree.left);
TreeNode p = left;
while(p!=null && p.right!=null)
{
p = p.right;
}
if(left != null)
{
p.right = pRootOfTree;
pRootOfTree.left = p;
}
TreeNode right = Convert(pRootOfTree.right);
if(right != null)
{
right.left = pRootOfTree;
pRootOfTree.right = right;
}
return left != null ? left:pRootOfTree;
}
}