javaScript實現簡易二叉樹創建

二叉樹:在計算機科學中,二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。
在這裏插入圖片描述
首先我們這張圖的二叉樹的頂端爲八,也被稱爲根節點

1, 6 則是兄弟節點,同屬於3的節點

最底層的4, 7, 13, 則被稱爲終點節點,又名葉子節點,

散佈邏輯

以8作爲根節點爲例,小於8的則是左子樹,大於八的則是右子樹,然後然後左右子樹在以此類推,

代碼實現邏輯

首先我們我們肯定會有個創建根節點的構造函數,和創建子節點的構造函數

建議在chrome下運行,此處打了三個debugger,可以看一下代碼的執行順序,然後看執行時的值

//這裏爲創建子節點的構造函數
  class BinaryNode {
            constructor(node) {
                this.node = node
                this.right = null
                this.left = null
            }
      }
	//這裏是創建根節點的構造函數
	 class BinaryTree { 
            constructor() {
            	//這裏爲根節點
                this.root = null
            }
            insert(newNode) {
                debugger
                //這裏是創建節點
                var newNode = new BinaryNode(newNode)
                //如果已經存在根節點
                if (this.root) {
                	//這裏是往根節點賦值
                    this.insertNode(this.root, newNode)
                } else {
                //沒有根節點就直接賦值給根節點
                    this.root = newNode
                }
            }
            insertNode(node, newNode) {
                debugger
                //node爲上一層根節點,
                //比較值,如果上層節點大於新的值,則往左子樹賦值
                if (node.node > newNode.node) {
                	//這裏是沒有左子樹則直接賦值
                    if (node.left === null) {
                        node.left = newNode
                    } else {
                   		//如果左子樹有值, 則重新調用此函數,
                        this.insertNode(node.left, newNode)
                    }
                } else {
                    if (node.right === null) {
                        node.right = newNode
                    } else {
                        this.insertNode(node.right, newNode)
                    }
                }
            }
        }

代碼邏輯寫完了 那我們試着調用以下構造函數

  var nodes = [8, 1, 3, 6, 7, 4, 10, 14, 13]
        var binaryTree = new BinaryTree()
        nodes.forEach(node => {
            debugger
            binaryTree.insert(node)
        })
        console.log(binaryTree.root) //看下圖

這是執行完forEach時的結果,順序展開後和我們最上面的圖則是完全一樣的;
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章