《剑指offer》刷题——【分解让复杂问题简单化】面试题36:二叉搜索树与双向链表(java实现)
一、题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,
只能调整树中结点指针的指向。
二、题目分析
- 二叉搜索树:左子节点的值总是小于父节点的值,右子节点总是大于父节点的值
- 双向链表:每个节点有两个指针,分别指向前一个节点和后一个节点
- 结果要求双向链表有序,则选择对二叉搜索树中序遍历
- 二叉搜索树指向左子节点的指针调整为链表中指向前一节点的指针,指向右子节点的指针调整为链表中指向后一节点的指针
- 过程:
- 先把左子树转换为排序双向链表
- 再把根节点连到末尾
- 再去和右子树转换成的双向链表的头链接
三、代码实现
public class Solution {
TreeNode curNode = null;
TreeNode head = null;
public TreeNode Convert(TreeNode pRootOfTree) {
if(pRootOfTree == null){
return null;
}
Convert(pRootOfTree.left);
if(curNode == null){
curNode = pRootOfTree;
head = pRootOfTree;
}
else{
curNode.right = pRootOfTree;
pRootOfTree.left = curNode;
curNode = pRootOfTree;
}
Convert(pRootOfTree.right);
return head;
}
}