tags: [javascript]
闲暇之余写了这个工具类,可以使用这个工具方法为链表及树相关的算法题快速构造参数。
class ListNode {constructor(val) {this.val = val;this.next = null;}}class TreeNode {constructor(val) {this.val = val;this.left = this.right = null;}}function buildList(arr) {return arr.reduceRight((pre, curr) => {const currNode = new ListNode(curr);currNode.next = pre;return currNode;}, new ListNode(arr[arr.length - 1]));}function buildTree(arr) {if (!arr.length) return null;if (arr.length === 1) return parent;const parent = new TreeNode(arr[0]);const queue = [parent];let index = 1;while(queue.length) {const p = queue.shift();if (p === null) {index++;continue;}if (index < arr.length) {p.left = arr[index] === null ? null : new TreeNode(arr[index]);queue.push(p.left);index++;}if (index < arr.length) {p.right = arr[index] === null ? null : new TreeNode(arr[index]);queue.push(p.right);index++;}}return parent;}buildTree([6,2,8,0,4,7,9,null,null,3,5]);
注:
- 代码中链表的构造思路是使用了 reduceRight 由最后一个节点向前构造
- 代码中树的构造思路是根据层次遍历的思想一层一层的构造
