Skip to content

一.树形结构

像数组、栈、队列、默认都是线性结构类型。常见的树形结构有二叉树和多叉树(大于两个叉的树)。

开发中常见的树形结构有: 文件夹目录DOM结构路由的配置...... (树的数据结构是非常重要的)

常见概念

  • 节点 (根节点、父节点、子节点、兄弟节点)

  • 子树 (左子树、右子树),子树的个数称之为度

  • 叶子节点 (度为0的节点) 非叶子节点 (度不为0的节点)

  • 节点的深度 (从根节点到当前节点所经过的节点总数)

  • 节点的高度 (从当前节点到最远叶子节点经过的节点总数)

  • 树的层数 (树的高度、树的深度)

  • 有序树( 节点按照顺序排列)、无序树

二.二叉树

二叉树是每个结点最多有两个子树的树结构 ,每个节点的度最多为2。 通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) ,左子树和右子树是有顺序的

二叉树的常见概念

  • 真二叉树: 不含一度节点的二叉树称作真二叉树(proper binary tree)
  • 满二叉树:满二叉树也是真二叉树,且所有的叶子节点都在最后一层
  • 完全二叉树: 深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

三.二叉树的遍历

线性数据结构遍历比较简单可以采用正序遍历、逆序遍历

1.二叉树的遍历方式

常见的二叉树遍历的四种方式

  • 前序遍历Preorder Traversal(先访问根节点、前序遍历左子树、前序遍历右子树)

  • 中序遍历 Inorder Traversal(中序遍历左子树、根节点、中序遍历右子树)

  • 后续遍历 Postorder Traversal(后序遍历左子树、后续遍历右子树、根节点)

  • 层序遍历 Level Order Traversal (从上到下,从左到右依次访问每一个节点)

tree

2.前序遍历

js
preorderTraversal() {
	const traversal = (node) => {
	if (node === null) return
        console.log(node.element); // 先访问根节点
        traversal(node.left); // 在访问左子树
        traversal(node.right);// 在访问右子树
    }
    traversal(this.root);
}

3.中序遍历

js

inorderTraversal() {
    const traversal = (node) => {
        if (node === null) return
        traversal(node.left);
        console.log(node.element);
        traversal(node.right);
    }
    traversal(this.root);
}

对于二叉搜索树来说,中序遍历默认从小到大或者从大到小。

4.后续遍历

js

postorderTraversal() {
    const traversal = (node) => {
    if (node === null) return
        traversal(node.left);
        traversal(node.right);
        console.log(node.element);
    }
 traversal(this.root);
}

5.层序遍历

js
levelOrderTraversal() {
    if (this.root == null) return;
    let stack = [this.root];
    let currentNode = null;
    let index = 0;
    while (currentNode = stack[index++]) {
        console.log(currentNode.element); 
        if (currentNode.left) {
            stack.push(currentNode.left);
        }
        if (currentNode.right) {
            stack.push(currentNode.right);
        }
    }
}

Released under the MIT License.