题目
- 二叉树要转成双向链表,如果只有三个,那么顶点和左右节点相互执行,构成双向链表,顶点在中间,左右节点在首位
- 其他位置一样,每个节点要构成双向链表,那么该节点在中间,和左边子树构成的双向链表的尾部相互指,和右边子树构成的双向链表的头节点相互指
- 构造二叉树返回结构,返回的左节点包含自身构成链表的首位节点,右节点包含自身构成链表的首位节点
class Node {
constructor(leftNode, rightNode) {
this.startNode = leftNode;
this.endNode = rightNode;
}
}
function process(binaryNode) {
if (binaryNode === null) {
return new Node(null, null);
}
const leftHeadNode = process(binaryNode.left);
const rightHeadNode = process(binaryNode.right);
// 左树链表的最后一个点
if (leftHeadNode.endNode !== null) {
leftHeadNode.endNode.right = binaryNode;
}
binaryNode.left = leftHeadNode.endNode;
// 右树链表的第一个点
binaryNode.right = rightHeadNode.startNode;
if (rightHeadNode.startNode !== null) {
rightHeadNode.startNode.left = binaryNode;
}
// 构造每个节点能获取到其左树构成的链表的头,右树构成链表的尾
return new Node(
leftHeadNode.startNode !== null ? leftHeadNode.startNode : binaryNode, // 左侧链表的头
rightHeadNode.endNode !== null ? rightHeadNode.endNode : binaryNode // 右侧链表的尾
);
}