我的root不是给定的,而是任意的,不能这样定义
时间: 2024-03-05 16:48:02 浏览: 50
非常抱歉,我之前的回答中定义了一个固定的二叉树用于测试代码。下面是可以适用于任意二叉树的代码:
```javascript
function postorderTraversal(root) {
let result = [];
if (root === null) {
return result;
}
let stack = [root];
let visited = new Set(); // 记录已经访问过的节点
while (stack.length) {
let node = stack[stack.length - 1];
if (
(node.left === null && node.right === null) || // 如果是叶子节点
(visited.has(node.left) && visited.has(node.right)) // 如果左右子节点都已经访问过
) {
result.push(node.val);
visited.add(node);
stack.pop();
} else {
if (node.right !== null && !visited.has(node.right)) {
stack.push(node.right);
}
if (node.left !== null && !visited.has(node.left)) {
stack.push(node.left);
}
}
}
return result;
}
// 创建一个任意的二叉树
let root = {
val: 1,
left: {
val: 2,
left: null,
right: null,
},
right: {
val: 3,
left: {
val: 4,
left: null,
right: null,
},
right: {
val: 5,
left: null,
right: null,
},
},
};
console.log(postorderTraversal(root)); // 输出 [2, 4, 5, 3, 1]
```
在这个代码中,我们没有预先创建一个固定的二叉树,而是直接使用一个任意的对象来表示二叉树。您可以根据自己的需要创建任意的二叉树,然后将其作为参数传递给 `postorderTraversal` 函数。
希望这个代码可以满足您的需求!
阅读全文