返回

二叉树的创建及遍历(JavaScript实现)

前端

二叉树:创建与遍历指南

什么是二叉树?

在计算机科学中,二叉树是一种非线性数据结构,每个结点最多有两个子结点。它类似于一棵倒置的树,根结点在顶部,子结点在其下方。二叉树广泛应用于文件系统、数据库索引和决策树等领域。

创建二叉树

使用 JavaScript 创建二叉树涉及以下步骤:

  • 定义结点类: 一个结点由一个数据值以及指向其左子结点和右子结点的引用组成。
  • 定义二叉树类: 一个二叉树由一个根结点组成,它可以是 null,表示空树。
  • 插入方法: 此方法用于将新结点插入树中。它遵循二叉搜索树的规则,其中左子树中的值小于或等于根结点,而右子树中的值大于根结点。

代码示例:

class Node {
  constructor(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }
}

class BinaryTree {
  constructor() {
    this.root = null;
  }

  insert(data) {
    const newNode = new Node(data);
    if (this.root === null) {
      this.root = newNode;
    } else {
      this._insert(newNode, this.root);
    }
  }

  _insert(newNode, current) {
    if (newNode.data < current.data) {
      if (current.left === null) {
        current.left = newNode;
      } else {
        this._insert(newNode, current.left);
      }
    } else {
      if (current.right === null) {
        current.right = newNode;
      } else {
        this._insert(newNode, current.right);
      }
    }
  }
}

遍历二叉树

遍历二叉树意味着以特定顺序访问每个结点。有三种常见的遍历顺序:

  • 先序遍历: 根结点、左子树、右子树
  • 中序遍历: 左子树、根结点、右子树
  • 后序遍历: 左子树、右子树、根结点

代码示例:

// 先序遍历
BinaryTree.prototype.preOrder = function (node) {
  if (node !== null) {
    console.log(node.data);
    this.preOrder(node.left);
    this.preOrder(node.right);
  }
};

// 中序遍历
BinaryTree.prototype.inOrder = function (node) {
  if (node !== null) {
    this.inOrder(node.left);
    console.log(node.data);
    this.inOrder(node.right);
  }
};

// 后序遍历
BinaryTree.prototype.postOrder = function (node) {
  if (node !== null) {
    this.postOrder(node.left);
    this.postOrder(node.right);
    console.log(node.data);
  }
};

示例

创建并遍历一个二叉树:

const tree = new BinaryTree();
tree.insert(10);
tree.insert(5);
tree.insert(15);
tree.insert(2);
tree.insert(7);
tree.insert(12);
tree.insert(20);

console.log("先序遍历:");
tree.preOrder(tree.root);

console.log("中序遍历:");
tree.inOrder(tree.root);

console.log("后序遍历:");
tree.postOrder(tree.root);

输出结果:

先序遍历:
10
5
2
7
15
12
20
中序遍历:
2
5
7
10
12
15
20
后序遍历:
2
7
5
12
20
15
10

常见问题解答

  1. 什么是二叉搜索树?
    二叉搜索树是一种二叉树,其结点中的值遵循二叉搜索树的性质:左子树中的值小于根结点,右子树中的值大于根结点。

  2. 二叉树和链表有什么区别?
    二叉树是一种非线性数据结构,其中每个结点最多有两个子结点。链表是一种线性数据结构,其中每个结点只有一个后继结点。

  3. 二叉树的应用有哪些?
    二叉树广泛应用于文件系统、数据库索引、决策树、语法分析和图形学等领域。

  4. 如何删除二叉树中的结点?
    删除二叉树中的结点涉及多种情况,具体取决于要删除的结点的子结点数量。

  5. 如何查找二叉树中的最大和最小值?
    在二叉搜索树中,最小值在最左边的结点中,最大值在最右边的结点中。对于一般的二叉树,需要遍历整个树才能找到最大和最小值。