题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
题目分析
要生成排序的双向列表,那么只能是中序遍历,因为中序遍历才能从小到大,所以需要递归,
- 先对左子数调整为双向链表,并用变量pLast指向最后一个节点
- 再将中间节点和pLast连起来
- 再去调整右子树
代码
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function Convert(pRootOfTree) { // write code here if(pRootOfTree == null) return null; let pLast=null; pLast=ConvertNode(pRootOfTree,pLast); let pHead=pLast; while(pHead&&pHead.left){ pHead=pHead.left; } return pHead; } function ConvertNode(pNode,pLast){ if(pNode==null) return; if(pNode.left){ pLast=ConvertNode(pNode.left,pLast); } pNode.left=pLast; if(pLast){ pLast.right=pNode; } pLast=pNode; if(pNode.right){ pLast=ConvertNode(pNode.right,pLast); } return pLast; }