//题目描述
//输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
// 解题思路
//因为要将二叉搜索树转化成排序的双向链表. 其实转换之后就是 二叉搜索树的中序遍历加上左右指针. 用中序遍历做.
//重点的是想到去用 中序遍历 去做. 很方便.
public class Solution
{
TreeNode pre = null; //定义链表当前结点的上一个结点.
TreeNode realHead = null; //定义链表头部的结点
//中序递归遍历修改链表指针即可实现
public TreeNode convert(TreeNode pRootOfTree)
{
//根节点为空,返回null
if (pRootOfTree == null)
{
return null;
}
//开始中序遍历
convert(pRootOfTree.left);
//中序遍历到的第一个节点 即为双向链表的头结点. 同时给pre赋值.
if (pre == null)
{
pre = pRootOfTree;
realHead = pRootOfTree;
}
//不是第一个遍历到的节点, pre就有值. pre即为 当前pRootOfTree的前一个节点.
else
{
//建立指针关系 //中间为中序遍历时做的操作.
pre.right = pRootOfTree;
pRootOfTree.left = pre;
//pre后移.
pre = pRootOfTree;
}
convert(pRootOfTree.right);
//中序遍历结束,返回头结点.
return realHead;
}
}
05-24
587