ZBLOG

二叉树中序遍历js

二叉树的中序遍历可以使用递归或者迭代的方式实现。下面是使用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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12963

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?