题目
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
解法: 由二叉搜索树数转换成一个排序的双向链表,因为二叉搜索树的特性(左子树小于根节点,右子树大于根节点)很自然就想到对其做一个中序遍历就能得到一个从小到大排序的链表,而双向链表则需要将前驱节点的right指针指向后驱节点,后驱节点的left指针指向前驱节点,因此在递归中序遍历时需要改变一下指针的指向。
let head=null;
let pre=null;
function Convert(pRootOfTree)
{
// write code here
if(!pRootOfTree){
return;
}
dfs(pRootOfTree);
return head;
}
function dfs(cur){
if(!cur) return;
dfs(cur.left); //递归左子树
if(pre){//改变前后节点指向
pre.right = cur;
cur.left = pre;
}else{
head=cur;
}
pre=cur;
dfs(cur.right); //递归右子树
}