二叉树的中序遍历可以使用递归或者迭代的方式实现。下面是使用JavaScript实现二叉树中序遍历的示例代码:
// 定义二叉树节点
class TreeNode {
constructor(val, left, right) {
this.val = val;
this.left = left;
this.right = right;
}
}
// 中序遍历(递归)
function inorderTraversalRecursive(root) {
const result = [];
function traverse(node) {
if (node === null) return;
traverse(node.left); // 遍历左子树
result.push(node.val); // 处理当前节点
traverse(node.right); // 遍历右子树
}
traverse(root);
return result;
}
// 中序遍历(迭代)
function inorderTraversalIterative(root) {
const result = [];
const stack = [];
let curr = root;
while (curr !== null || stack.length > 0) {
while (curr !== null) { // 将当前节点及其左子节点依次入栈
stack.push(curr);
curr = curr.left;
}
curr = stack.pop(); // 出栈并处理当前节点
result.push(curr.val);
curr = curr.right; // 处理右子节点
}
return result;
}
// 创建一个二叉树作为测试数据
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right= new TreeNode(5);
console.log(inorderTraversalRecursive(root)); // 使用递归方式中序遍历输出 [4, 2, 5, 1, 3]
console.log(inorderTraversalIterative(root)); // 使用迭代方式中序遍历输出 [4, 2, 5, 1, 3]
以上代码定义了一个二叉树节点类 TreeNode
,然后分别实现了递归和迭代的方式进行二叉树的中序遍历。使用给定的测试数据进行验证,并打印出结果。
递归版本的中序遍历通过先访问左子树,然后处理当前节点,最后再访问右子树来实现。迭代版本则利用一个辅助栈来模拟递归过程,首先将当前节点及其左子节点入栈,然后出栈并处理当前节点,在处理完当前节点之后再处理右子节点。最终都会得到按照中序遍历顺序排列的结果数组。
内容由零声教学AI助手提供,问题来源于学员提问