题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
思路-递归
将根节点左孩子和右孩子都转换为双向链表,然后改变跟节点的left和right指针
实现
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree==null){
return null;
}
if(pRootOfTree.left==null&&pRootOfTree.right==null){
return pRootOfTree;
}
TreeNode p=Convert(pRootOfTree.left);
TreeNode q=Convert(pRootOfTree.right);
//注:最后递归返回的是一个双向链表的头,所以左边生成的双向链表必须遍历一下找到结尾,右边的可以直接使用
if(p!=null){
while(p.right!=null){
p=p.right;
}
p.right=pRootOfTree;
pRootOfTree.left=p;
}
if(q!=null){
pRootOfTree.right=q;
q.left=pRootOfTree;
}
//遍历找到此次递归生成的双向链表的头
while(pRootOfTree.left!=null){
pRootOfTree=pRootOfTree.left;
}
return pRootOfTree;
}
京公网安备 11010502036488号