原文地址:http://www.brandhuang.com/article/1564967352592node
一棵樹最上面的節點:根結點函數
一個節點下面鏈接多個節點,那個這個節點稱「爲父節點」,它下面的節點稱爲「子節點」,沒有任何子節點的節點稱爲「葉子節點」。this
一個節點能夠有多個子節點調試
二叉樹是一種特殊的樹,子節點數不超過「2個」。code
以某種特定的順序訪問樹中全部的節點稱爲樹的遍歷對象
樹的層數稱爲「樹的深度」排序
一個父節點的兩個子節點分別稱爲「左節點」和「右節點」get
「二叉查找樹」(又稱二叉排序樹)是一種特殊的二叉樹。++相對較小的值保存在左節點中,相對較大的值保存在右節點中++io
用代碼構建二叉樹前,先要在腦中不斷的重複二叉樹的重要特色:function
明白了這三點,咱們就能夠開始寫代碼了
構建二叉樹的完整代碼請看文末
建立一個二叉樹對象,定義一個對象來保存節點的值和其子節點
function binaryTree(){ let Node = function (key){ this.key = key // 節點值 this.left = null // 該節點的左節點 this.right = null // 該節點的右節點 } let root = null // 根結點,初始值爲null }
在binaryTree中建立一個insert方法,經過insert方法向樹中添加新節點
function binaryTree(){ let Node = function (key){ this.key = key // 節點值 this.left = null // 該節點的左節點 this.right = null // 該節點的右節點 } let root = null // 根結點,初始值爲null let insertNode = function(node, newNode){ if (newNode.key < node.key) { // 若是新節點的key值小於原來節點的key值,則該新節點做爲原節點的左節點加入 if (node.left) { // 若是原節點的左節點已經存在,則繼續執行insertNode方法 insertNode(node.left, newNode) } else { // 若是原節點的左節點不存在,則將新節點做爲原節點的左節點 node.left = newNode } } else { // 若是新節點的key值大於原來節點的key值,則做爲原節點的右節點加入 if (node.right) { insertNode(node.right, newNode) } else { node.right = newNode } } } this.insert = function(key){ let newNode = new Node(key) // 插入節點時建立一個Node對象來保存節點的數據 if (root) { insertNode(root, newNode) // 若是根結點已經存在,則經過insertNode方法進行插入 } else { root = newNode // 若是根結點爲空,則把該節點做爲根結點 } } }
let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13] let tree = new binaryTree() nodes.forEach(function (key) { tree.insert(key) })
至此,一個二叉樹構建完畢
其實,只要你瞭解了二叉樹的三個重要特色,構建一棵二叉樹是否是仍是比較容易的呢?
能夠將代碼複製到本身的文件中進行單步調試,看看執行的結果是否是和前面描述的二叉樹的特色相同。
感謝你的閱讀
完整代碼:
function binaryTree(){ let Node = function (key){ this.key = key // 節點值 this.left = null // 該節點的左節點 this.right = null // 該節點的右節點 } let root = null // 根結點,初始值爲null let insertNode = function(node, newNode){ if (newNode.key < node.key) { // 若是新節點的key值小於原來節點的key值,則該新節點做爲原節點的左節點加入 if (node.left) { // 若是原節點的左節點已經存在,則繼續執行insertNode方法 insertNode(node.left, newNode) } else { // 若是原節點的左節點不存在,則將新節點做爲原節點的左節點 node.left = newNode } } else { // 若是新節點的key值大於原來節點的key值,則做爲原節點的右節點加入 if (node.right) { insertNode(node.right, newNode) } else { node.right = newNode } } } this.insert = function(key){ let newNode = new Node(key) // 插入節點時建立一個Node對象來保存節點的數據 if (root) { insertNode(root, newNode) // 若是根結點已經存在,則經過insertNode方法進行插入 } else { root = newNode // 若是根結點爲空,則把該節點做爲根結點 } } } let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13] let tree = new binaryTree() nodes.forEach(function (key) { tree.insert(key) })