tags: [javascript]


    闲暇之余写了这个工具类,可以使用这个工具方法为链表及树相关的算法题快速构造参数。

    1. class ListNode {
    2. constructor(val) {
    3. this.val = val;
    4. this.next = null;
    5. }
    6. }
    7. class TreeNode {
    8. constructor(val) {
    9. this.val = val;
    10. this.left = this.right = null;
    11. }
    12. }
    13. function buildList(arr) {
    14. return arr.reduceRight((pre, curr) => {
    15. const currNode = new ListNode(curr);
    16. currNode.next = pre;
    17. return currNode;
    18. }, new ListNode(arr[arr.length - 1]));
    19. }
    20. function buildTree(arr) {
    21. if (!arr.length) return null;
    22. if (arr.length === 1) return parent;
    23. const parent = new TreeNode(arr[0]);
    24. const queue = [parent];
    25. let index = 1;
    26. while(queue.length) {
    27. const p = queue.shift();
    28. if (p === null) {
    29. index++;
    30. continue;
    31. }
    32. if (index < arr.length) {
    33. p.left = arr[index] === null ? null : new TreeNode(arr[index]);
    34. queue.push(p.left);
    35. index++;
    36. }
    37. if (index < arr.length) {
    38. p.right = arr[index] === null ? null : new TreeNode(arr[index]);
    39. queue.push(p.right);
    40. index++;
    41. }
    42. }
    43. return parent;
    44. }
    45. buildTree([6,2,8,0,4,7,9,null,null,3,5]);

    注:

    1. 代码中链表的构造思路是使用了 reduceRight 由最后一个节点向前构造
    2. 代码中树的构造思路是根据层次遍历的思想一层一层的构造