最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:27:04
文檔

JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解

JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解:本文實(shí)例講述了JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法。分享給大家供大家參考,具體如下: 之前學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,學(xué)了二叉樹的先序、中序、后序遍歷的方法,并用C語言實(shí)現(xiàn)了,下文是用js實(shí)現(xiàn)二叉樹的3種遍歷,并以動(dòng)畫的形式展現(xiàn)出遍歷的過程。
推薦度:
導(dǎo)讀JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解:本文實(shí)例講述了JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法。分享給大家供大家參考,具體如下: 之前學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,學(xué)了二叉樹的先序、中序、后序遍歷的方法,并用C語言實(shí)現(xiàn)了,下文是用js實(shí)現(xiàn)二叉樹的3種遍歷,并以動(dòng)畫的形式展現(xiàn)出遍歷的過程。

本文實(shí)例講述了JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法。分享給大家供大家參考,具體如下:

之前學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,學(xué)了二叉樹的先序、中序、后序遍歷的方法,并用C語言實(shí)現(xiàn)了,下文是用js實(shí)現(xiàn)二叉樹的3種遍歷,并以動(dòng)畫的形式展現(xiàn)出遍歷的過程。

整個(gè)遍歷過程還是采用遞歸的思想,原理很粗暴也很簡(jiǎn)單

先序遍歷的函數(shù):

function preOrder(node){
 if(!(node==null)){
 divList.push(node);
 preOrder(node.firstElementChild);
 preOrder(node.lastElementChild);
 }
}

中序遍歷的函數(shù):

function inOrder(node) {
 if (!(node == null)) {
 inOrder(node.firstElementChild);
 divList.push(node);
 inOrder(node.lastElementChild);
 }
}

后序遍歷的函數(shù):

function postOrder(node) {
 if (!(node == null)) {
 postOrder(node.firstElementChild);
 postOrder(node.lastElementChild);
 divList.push(node);
 }
}

顏色變化函數(shù):

function changeColor(){
 var i=0;
 divList[i].style.backgroundColor = 'blue';
 timer=setInterval(function(argument){
 i++;
 if(i<divList.length){
 divList[i-1].style.backgroundColor="#fff";
 divList[i].style.backgroundColor="blue";
 }
 else{
 divList[divList.length-1].style.backgroundColor="#fff";
 }
 },500)
}

核心代碼如上,本來想寫深度優(yōu)先遍歷和廣度優(yōu)先遍歷。后來發(fā)現(xiàn)二叉樹深度優(yōu)先遍歷和先序遍歷相同。改日總結(jié)一下樹的BFS和DFS。

全部代碼如下:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title></title>
 <style>
 .root{
 display: flex;
 padding: 20px;
 width: 1000px;
 height: 300px;border: 1px solid #000000;
 margin: 100px auto;
 margin-bottom: 10px;
 justify-content: space-between;
 }
 .child_1{
 display: flex;
 padding: 20px;
 width: 450px;
 height: 260px;border: 1px solid red;
 justify-content: space-between;
 }
 .child_2{
 display: flex;
 padding: 20px;
 width: 170px;
 height: 220px;border: 1px solid green;
 justify-content: space-between;
 }
 .child_3{
 display: flex;
 padding: 20px;
 width: 35px;
 height: 180px;border: 1px solid blue;
 justify-content: space-between;
 }
 input{
 margin-left: 100px;
 width: 60px;
 height: 40px;
 font:20px italic;
 }
 </style>
</head>
<body>
<div class="root">
 <div class="child_1">
 <div class="child_2">
 <div class="child_3"></div>
 <div class="child_3"></div>
 </div>
 <div class="child_2">
 <div class="child_3"></div>
 <div class="child_3"></div>
 </div>
 </div>
 <div class="child_1">
 <div class="child_2">
 <div class="child_3"></div>
 <div class="child_3"></div>
 </div>
 <div class="child_2">
 <div class="child_3"></div>
 <div class="child_3"></div>
 </div>
 </div>
</div>
<input type="button" value="先序">
<input type="button" value="中序">
<input type="button" value="后序">
<script type="text/javascript" src="遍歷.js"></script>
</body>
</html>

js:

/**
 * Created by hp on 2016/12/22.
 */
var btn = document.getElementsByTagName('input'),
 preBtn = btn[0],
 inBtn = btn[1],
 postBtn = btn[2],
 treeRoot = document.getElementsByClassName('root')[0],
 divList = [],
 timer = null;
window.onload=function(){
 preBtn.onclick = function () {
 reset();
 preOrder(treeRoot);
 changeColor();
 }
 inBtn.onclick = function () {
 reset();
 inOrder(treeRoot);
 changeColor();
 }
 postBtn.onclick = function () {
 reset();
 postOrder(treeRoot);
 changeColor();
 }
}
/*先序遍歷*/
function preOrder(node){
 if(!(node==null)){
 divList.push(node);
 preOrder(node.firstElementChild);
 preOrder(node.lastElementChild);
 }
}
/*中序遍歷*/
function inOrder(node) {
 if (!(node == null)) {
 inOrder(node.firstElementChild);
 divList.push(node);
 inOrder(node.lastElementChild);
 }
}
/*后序遍歷*/
function postOrder(node) {
 if (!(node == null)) {
 postOrder(node.firstElementChild);
 postOrder(node.lastElementChild);
 divList.push(node);
 }
}
/*顏色變化函數(shù)*/
function changeColor(){
 var i=0;
 divList[i].style.backgroundColor = 'blue';
 timer=setInterval(function(argument){
 i++;
 if(i<divList.length){
 divList[i-1].style.backgroundColor="#fff";
 divList[i].style.backgroundColor="blue";
 }
 else{
 divList[divList.length-1].style.backgroundColor="#fff";
 }
 },500)
}
function reset(){
 divList=[];
 clearInterval(timer);
 var divs=document.getElementsByTagName("div");
 for(var i=0;i<divs.length;i++){
 divs[i].style.backgroundColor="#fff";
 }
}

由此可見,二叉樹的遍歷思想是一樣的。之前一直把JS看做是寫各種特效的語言,現(xiàn)在向來是too naive了。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解

JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法詳解:本文實(shí)例講述了JavaScript實(shí)現(xiàn)二叉樹的先序、中序及后序遍歷方法。分享給大家供大家參考,具體如下: 之前學(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,學(xué)了二叉樹的先序、中序、后序遍歷的方法,并用C語言實(shí)現(xiàn)了,下文是用js實(shí)現(xiàn)二叉樹的3種遍歷,并以動(dòng)畫的形式展現(xiàn)出遍歷的過程。
推薦度:
標(biāo)簽: 方法 js 詳解
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top