JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历

的JavaScript实现:二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 定义二叉树节点类
class Node {
      
      
  constructor(value) {
      
      
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

// 定义二叉树类
class BinaryTree {
      
      
  constructor() {
      
      
    this.root = null;
  }

  // 插入节点
  insert(value) {
      
      
    let newNode = new Node(value);
    if (!this.root) {
      
      
      this.root = newNode;
    } else {
      
      
      this._insertNode(this.root, newNode);
    }
  }

  _insertNode(node, newNode) {
      
      
    if (newNode.value < node.value) {
      
      
      if (!node.left) {
      
      
        node.left = newNode;
      } else {
      
      
        this._insertNode(node.left, newNode);
      }
    } else {
      
      
      if (!node.right) {
      
      
        node.right = newNode;
      } else {
      
      
        this._insertNode(node.right, newNode);
      }
    }
  }

  // 先序遍历
  preOrderTraversal(callback) {
      
      
    this._preOrderTraversalNode(this.root, callback);
  }

  _preOrderTraversalNode(node, callback) {
      
      
    if (node) {
      
      
      callback(node.value);
      this._preOrderTraversalNode(node.left, callback);
      this._preOrderTraversalNode(node.right, callback);
    }
  }

  // 中序遍历
  inOrderTraversal(callback) {
      
      
    this._inOrderTraversalNode(this.root, callback);
  }

  _inOrderTraversalNode(node, callback) {
      
      
    if (node) {
      
      
      this._inOrderTraversalNode(node.left, callback);
      callback(node.value);
      this._inOrderTraversalNode(node.right, callback);
    }
  }

  // 后序遍历
  postOrderTraversal(callback) {
      
      
    this._postOrderTraversalNode(this.root, callback);
  }

  _postOrderTraversalNode(node, callback) {
      
      
    if (node) {
      
      
      this._postOrderTraversalNode(node.left, callback);
      this._postOrderTraversalNode(node.right, callback);
      callback(node.value);
    }
  }
}

// 示例代码
let tree = new BinaryTree();
tree.insert(4);
tree.insert(2);
tree.insert(1);
tree.insert(3);
tree.insert(6);
tree.insert(5);
tree.insert(7);

console.log('先序遍历结果:');
tree.preOrderTraversal(console.log);

console.log('中序遍历结果:');
tree.inOrderTraversal(console.log);

console.log('后序遍历结果:');
tree.postOrderTraversal(console.log);

  </script>
</body>
</html>

定义了一个Node类和一个BinaryTree类。其中Node类表示二叉树的节点,包含一个值value和左右子节点left和right。BinaryTree类表示整个二叉树,包含一个根节点root和插入节点和遍历节点的方法。插入节点的方法_insertNode采用递归的方式,先序遍历、中序遍历和后序遍历的方法_preOrderTraversalNode、_inOrderTraversalNode和_postOrderTraversalNode也都采用递归的方式实现。最后的示例代码创建了一个二叉树,并对其进行了先序遍历、中序遍历和后序遍历,并将结果打印出

猜你喜欢

转载自blog.csdn.net/m0_46672781/article/details/130241334