摘要:一個節(jié)點可以有多個子節(jié)點二叉樹二叉樹是一種特殊的樹,子節(jié)點數(shù)不超過個。以某種特定的順序訪問樹中所有的節(jié)點稱為樹的遍歷樹的層數(shù)稱為樹的深度一個父節(jié)點的兩個子節(jié)點分別稱為左節(jié)點和右節(jié)點二叉查找樹又稱二叉排序樹是一種特殊的二叉樹。
原文地址:http://www.brandhuang.com/article/1564967352592
1、樹一棵樹最上面的節(jié)點:根結(jié)點
一個節(jié)點下面連接多個節(jié)點,那個這個節(jié)點稱「為父節(jié)點」,它下面的節(jié)點稱為「子節(jié)點」,沒有任何子節(jié)點的節(jié)點稱為「葉子節(jié)點」。
一個節(jié)點可以有多個子節(jié)點
2、二叉樹二叉樹是一種特殊的樹,子節(jié)點數(shù)不超過「2個」。
以某種特定的順序訪問樹中所有的節(jié)點稱為樹的遍歷
樹的層數(shù)稱為「樹的深度」
一個父節(jié)點的兩個子節(jié)點分別稱為「左節(jié)點」和「右節(jié)點」
「二叉查找樹」(又稱二叉排序樹)是一種特殊的二叉樹。++相對較小的值保存在左節(jié)點中,相對較大的值保存在右節(jié)點中++
3、js構(gòu)建以一顆二叉樹用代碼構(gòu)建二叉樹前,先要在腦中不斷的重復二叉樹的重要特點:
二叉樹有一個父節(jié)點和左右兩個子節(jié)點;
每個節(jié)點有一個值,稱為節(jié)點值;
左節(jié)點的值小于父節(jié)點的值,右節(jié)點的值大于父節(jié)點值。
明白了這三點,我們就可以開始寫代碼了
構(gòu)建二叉樹的完整代碼請看文末
3.1 創(chuàng)建一個二叉樹對象創(chuàng)建一個二叉樹對象,定義一個對象來保存節(jié)點的值和其子節(jié)點
function binaryTree(){ let Node = function (key){ this.key = key // 節(jié)點值 this.left = null // 該節(jié)點的左節(jié)點 this.right = null // 該節(jié)點的右節(jié)點 } let root = null // 根結(jié)點,初始值為null }3.2 創(chuàng)建一個構(gòu)建二叉樹的函數(shù)
在binaryTree中創(chuàng)建一個insert方法,通過insert方法向樹中添加新節(jié)點
function binaryTree(){ let Node = function (key){ this.key = key // 節(jié)點值 this.left = null // 該節(jié)點的左節(jié)點 this.right = null // 該節(jié)點的右節(jié)點 } let root = null // 根結(jié)點,初始值為null let insertNode = function(node, newNode){ if (newNode.key < node.key) { // 如果新節(jié)點的key值小于原來節(jié)點的key值,則該新節(jié)點作為原節(jié)點的左節(jié)點加入 if (node.left) { // 如果原節(jié)點的左節(jié)點已經(jīng)存在,則繼續(xù)執(zhí)行insertNode方法 insertNode(node.left, newNode) } else { // 如果原節(jié)點的左節(jié)點不存在,則將新節(jié)點作為原節(jié)點的左節(jié)點 node.left = newNode } } else { // 如果新節(jié)點的key值大于原來節(jié)點的key值,則作為原節(jié)點的右節(jié)點加入 if (node.right) { insertNode(node.right, newNode) } else { node.right = newNode } } } this.insert = function(key){ let newNode = new Node(key) // 插入節(jié)點時創(chuàng)建一個Node對象來保存節(jié)點的數(shù)據(jù) if (root) { insertNode(root, newNode) // 如果根結(jié)點已經(jīng)存在,則通過insertNode方法進行插入 } else { root = newNode // 如果根結(jié)點為空,則把該節(jié)點作為根結(jié)點 } } }3.3 構(gòu)建一個二叉樹
let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13] let tree = new binaryTree() nodes.forEach(function (key) { tree.insert(key) })
至此,一個二叉樹構(gòu)建完畢
其實,只要你了解了二叉樹的三個重要特點,構(gòu)建一棵二叉樹是不是還是比較容易的呢?
可以將代碼復制到自己的文件中進行單步調(diào)試,看看執(zhí)行的結(jié)果是不是和前面描述的二叉樹的特點相同。
感謝你的閱讀
完整代碼:
function binaryTree(){ let Node = function (key){ this.key = key // 節(jié)點值 this.left = null // 該節(jié)點的左節(jié)點 this.right = null // 該節(jié)點的右節(jié)點 } let root = null // 根結(jié)點,初始值為null let insertNode = function(node, newNode){ if (newNode.key < node.key) { // 如果新節(jié)點的key值小于原來節(jié)點的key值,則該新節(jié)點作為原節(jié)點的左節(jié)點加入 if (node.left) { // 如果原節(jié)點的左節(jié)點已經(jīng)存在,則繼續(xù)執(zhí)行insertNode方法 insertNode(node.left, newNode) } else { // 如果原節(jié)點的左節(jié)點不存在,則將新節(jié)點作為原節(jié)點的左節(jié)點 node.left = newNode } } else { // 如果新節(jié)點的key值大于原來節(jié)點的key值,則作為原節(jié)點的右節(jié)點加入 if (node.right) { insertNode(node.right, newNode) } else { node.right = newNode } } } this.insert = function(key){ let newNode = new Node(key) // 插入節(jié)點時創(chuàng)建一個Node對象來保存節(jié)點的數(shù)據(jù) if (root) { insertNode(root, newNode) // 如果根結(jié)點已經(jīng)存在,則通過insertNode方法進行插入 } else { root = newNode // 如果根結(jié)點為空,則把該節(jié)點作為根結(jié)點 } } } let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13] let tree = new binaryTree() nodes.forEach(function (key) { tree.insert(key) })
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/106375.html
摘要:因此,根據(jù)題目給出的先序遍歷和中序遍歷,可以畫出二叉樹選參考數(shù)據(jù)結(jié)構(gòu)與算法描述實現(xiàn)二叉樹算法淺談數(shù)據(jù)結(jié)構(gòu)二叉樹慕課網(wǎng)實現(xiàn)二叉樹算法前端樹控件騰訊軟件開發(fā)面試題 內(nèi)容銜接上一章 數(shù)據(jù)結(jié)構(gòu)與算法:常見排序算法 內(nèi)容提要 什么是樹 - 為什么使用樹 二叉樹 二叉查找樹 紅黑樹 B、B+樹 堆 伸展樹 樹 可以點擊鏈接感受下筆者用d3.js畫的tree https://codepen...
摘要:筆者寫的數(shù)據(jù)結(jié)構(gòu)與算法之美系列用的語言是,旨在入門數(shù)據(jù)結(jié)構(gòu)與算法和方便以后復習。非線性表中的樹堆是干嘛用的其數(shù)據(jù)結(jié)構(gòu)是怎樣的希望大家?guī)е@兩個問題閱讀下文。其中,前中后序,表示的是節(jié)點與它的左右子樹節(jié)點遍歷訪問的先后順序。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 想學好前端,先練好內(nèi)功,內(nèi)功不行,...
摘要:像剛才的這幅圖,就是二叉搜索樹。而我們本文要學習的內(nèi)容,就是如何寫一個二叉搜索樹。但在二叉搜索樹中,我們把節(jié)點成為鍵,這是術(shù)語。前端路漫漫,且行且歌的前端樂園原文鏈接寒假前端學習學習數(shù)據(jù)結(jié)構(gòu)與算法四二叉搜索樹 本系列的第一篇文章: 學習JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊列第二篇文章:學習JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學習JavaScript數(shù)據(jù)...
摘要:二叉搜索樹的特性二叉搜索樹由于其獨特的數(shù)據(jù)結(jié)構(gòu),使得其無論在增刪,還是查找,時間復雜度都是,為二叉樹的高度。二叉搜索樹的查找查找很簡單,根據(jù)左子節(jié)點比該節(jié)點小,右子節(jié)點比該節(jié)點大的原則進行循環(huán)判斷即可。 什么是二叉樹 二叉樹就是樹的每個節(jié)點最多只能有兩個子節(jié)點 什么是二叉搜索樹 二叉搜索樹在二叉樹的基礎上,多了一個條件,就是二叉樹在插入值時,若插入值比當前節(jié)點小,就插入到左節(jié)點,否則插...
摘要:重建二叉樹輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請重建出該二叉樹。所以先通過前序遍歷找出根節(jié)點,然后將中序遍歷分為左右子樹兩組,最后對于每個子樹依次遞歸調(diào)用。 重建二叉樹 輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復的數(shù)字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6}...
閱讀 1910·2021-11-25 09:43
閱讀 1558·2021-09-02 15:21
閱讀 3524·2019-08-30 15:52
閱讀 1559·2019-08-30 12:48
閱讀 1374·2019-08-30 10:57
閱讀 2991·2019-08-26 17:41
閱讀 743·2019-08-26 11:59
閱讀 1427·2019-08-26 10:41