二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析
首先注意要求的是一个排序的双向链表,从小到大,嗯,看到这里我就想到了二叉排序树的中序遍历,因为二叉排序树的中序遍历就是从小到大节点进行遍历的。
代码
//节点类
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) {
ConvertSub(pRootOfTree);
return realHead;
}
public void ConvertSub(TreeNode pRootOfTree) {
if(pRootOfTree == null) {
return;
}
ConvertSub(pRootOfTree.left);
if(head == null) { //遍历到树的最左叶子节点,也就是双向链表的头结点
head = pRootOfTree; //缓存当前节点
realHead = pRootOfTree; //指向双向链表的头结点
}
else {
head.right = pRootOfTree; //head为是当前节点在双向链表中的前一个节点
pRootOfTree.left = head;
head = pRootOfTree;
}
ConvertSub(pRootOfTree.right);
}
}