前端之数据结构(五)二叉树

这是我参与8月更文挑战的第六天,活动详情查看:8月更文挑战markdown

上一章介绍的树的基本概念,并简单说了一下深度优先遍历和广度优先遍历。app

这一章就来介绍一下树的另外一种结构 二叉树 , 并唠唠它的先中后序遍历。post

二叉树

  • 树中每一个节点最多只能有两个子节点。ui

  • 下图就是一个现实中存在的二叉树,每一个节点下都有两个字节点。说实话挺佩服拍照的人的,居然真在现实生活中找到真实的二叉树。url

image.png

  • JS 中一般用 Object 来模拟二叉树。以下代码:
const binaryTree = {
    val: 1,
    left: {
        val: 2,
        left: null,
        right: null
    }
    right: {
        val: 3,
        left: null,
        right: null
    }
}
复制代码

就是一个简单的一个经过 JS Object 模拟的二叉树。spa

先序遍历

  • 访问根节点。3d

  • 对根节点的左子树进行先序遍历。code

  • 对根节点的右子树进行先序遍历。orm

image.png

代码以下:cdn

const binaryTree = {
    val: 1,
    left: {
        val: 2,
        left: {
            val: 3,
            left: null,
            right: null
        },
        right: {
            val: 4,
            left: {
                val: 5,
                left: null,
                right: null
            },
            right: null
        }
    },
    right: {
        val: 6,
        left: null,
        right: {
            val: 7,
            left: null,
            right: null
        }
    }
}
复制代码

进行先序遍历:

const preorder = (root) => {
    if (!root) return
    console.log(root.val)
    preorder(root.left)
    preorder(root.right)
}

preorder(binaryTree)

// 1 2 3 4 5 6 7
复制代码

中序遍历

  • 对根节点的左子树进行中序遍历。

  • 访问根节点。

  • 对根节点的右子树进行中序遍历。

image.png

代码以下:

const binaryTree = {
    val: 5,
    left: {
        val: 2,
        left: {
            val: 1,
            left: null,
            right: null
        },
        right: {
            val: 4,
            left: {
                val: 3,
                left: null,
                right: null
            },
            right: null
        }
    },
    right: {
        val: 6,
        left: null,
        right: {
            val: 7,
            left: null,
            right: null
        }
    }
}
复制代码

进行中序遍历:

const inorder = (root) => {
    if (!root) return
    inorder(root.left)
    console.log(root.val)
    inorder(root.right)
}

inorder(binaryTree)
// 1 2 3 4 5 6 7
复制代码

后序遍历

  • 对根节点的左子树进行中序遍历。

  • 对根节点的右子树进行中序遍历。

  • 访问根节点。

image.png

代码结构以下:

const binaryTree = {
    val: 7,
    left: {
        val: 4,
        left: {
            val: 1,
            left: null,
            right: null
        },
        right: {
            val: 3,
            left: {
                val: 2,
                left: null,
                right: null
            },
            right: null
        }
    },
    right: {
        val: 6,
        left: null,
        right: {
            val: 5,
            left: null,
            right: null
        }
    }
}
复制代码

进行后序遍历:

const postorder = (root) => {
    if (!root) return
    postorder(root.left)
    postorder(root.right)
    console.log(root.val)
}

postorder(binaryTree)
// 1 2 3 4 5 6 7
复制代码

End~~~

相关文章
相关标签/搜索