以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
137. 垂直遍历二叉树
解题思路:
- 遍历二叉树,记录每个节点的坐标,以根节点为原点,左侧节点 x 坐标减 1,右侧节点 x 坐标加 1,深度 y 坐标加 1;
- 将记录的节点按照 x 坐标从小到大排序,相同 x 坐标的按照 y 坐标从小到大排序;
- 将排序后的节点的值按照顺序存入数组中即为垂直遍历的结果。
具体实现:
function verticalTraversal(root) { const nodeArr = []; // 记录每个节点的坐标和值 function traverse(node, x = 0, y = 0) { if (!node) { return; } nodeArr.push({val: node.val, x, y}); traverse(node.left, x - 1, y + 1); traverse(node.right, x + 1, y + 1); } traverse(root); nodeArr.sort((a, b) => { if (a.x !== b.x) { return a.x - b.x; } else if (a.y !== b.y) { return a.y - b.y; } else { return a.val - b.val; } }); return nodeArr.map(item => item.val);}
时间复杂度:O(nlogn),其中 n 为树的节点个数,需要遍历每个节点并排序。
空间复杂度:O(n),需要记录每个节点的坐标和值。