以下为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),需要记录每个节点的坐标和值。