链接
牛客: 二叉搜索树与双向链表
LeetCode:剑指 Offer 36. 二叉搜索树与双向链表
426. 将二叉搜索树转化为排序的双向链表
思路
根据二叉搜索树的性质,中序遍历就是一个排序的列表,我们只需将原本输出那部分的操作换成了改变结点的方向。
牛客和LeetCode这两道题略有不同,LeetCode相较于原题有所改动,将双向链表变成双向循环链表。
代码
public class Solution {
//需要两个辅助结点 head和realHead
//head一直在变,realHead是一开始的结点 其实也就是最左边的结点
TreeNode head = null;
TreeNode realHead = null;
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return realHead;
}
private void ConvertSub(TreeNode pRootOfTree) {
if(pRootOfTree == null) return;
ConvertSub(pRootOfTree.left);
//当遍历到最左边结点的时候,赋值给head和realHead realHead不会再变
//当遍历到其他结点的时候,将head和这个结点前后链接起来就可以了 因为是按照中序遍历的顺序来的
if (head == null) {
head = pRootOfTree;
realHead = pRootOfTree;
} else {
head.right = pRootOfTree;
pRootOfTree.left = head;
head = pRootOfTree;
}
ConvertSub(pRootOfTree.right);
}
}