《剑指offer》— JavaScript(26)二叉搜索树与双向链表
二叉搜索树与双向链表
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路
- 递归思想:把大问题转换为若干小问题;
- 由于JavaScript中并没有链表或者Tree这样的原生数据结构,都是通过对象模拟的,因此最终要返回的是指向双向链表首结点的指针;
- 将左子树构成双向链表,返回的是左子树的尾结点,将其连接到root的左边;
- 将右子树构成双向链表,将其追加到root结点之后,并返回尾结点;
- 向左遍历返回的链表至头结点处,即为所求双向链表的首结点。
实现代码
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function Convert(pRootOfTree) { if (!pRootOfTree) { return null; } var lastNode = null; lastNode = ConvertNode(pRootOfTree, lastNode); var head = lastNode; while (head && head.left) { head = head.left; } return head; } function ConvertNode(node, lastNode) { if (!node) { return; } if (node.left) { lastNode = ConvertNode(node.left, lastNode); } node.left = lastNode; if (lastNode) { lastNode.right = node; } lastNode = node; if (node.right) { lastNode = ConvertNode(node.right, lastNode); } return lastNode; }
相关推荐
koushr 2020-11-12
范范 2020-10-28
zhaochen00 2020-10-13
Mars的自语 2020-09-27
steeven 2020-09-18
kka 2020-09-14
qiangde 2020-09-13
聚沙成塔积水成渊 2020-08-16
earthhouge 2020-08-15
aanndd 2020-08-12
范范 2020-07-30
bluetears 2020-07-28
mingyunxiaohai 2020-07-19
horizonheart 2020-07-19
liushall 2020-07-18
bluetears 2020-07-05
fengshantao 2020-07-02
liuweixiao0 2020-06-27