前端之數據結構(五)二叉樹

這是我參與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~~~

相關文章
相關標籤/搜索