この記事では主に、バイナリ ツリーの事前順序、順序内、および順序後の走査を実装するための JavaScript を紹介します。JavaScript でのバイナリ ツリーの事前順序、順序内、および順序後の走査の実装方法を要約および分析します。関連する操作上の注意事項を例として示しますので、ご参考にしていただければ幸いです。
この記事の例では、JavaScript を使用してバイナリ ツリーの事前順序、順序内、および順序後の走査を実装する方法を説明します。参考までに、詳細は以下の通りです:
以前、データ構造を学習していたときに、バイナリツリーの前順、順、後順の走査方法を学び、C言語で実装しました。 . js Traverse を使用してバイナリ ツリーを実装し、トラバースのプロセスをアニメーションの形式で表示する 3 つの方法を以下に示します。
走査プロセス全体は依然として再帰の考え方を採用しています。
前次走査の関数:
function preOrder(node){ if(!(node==null)){ pList.push(node); preOrder(node.firstElementChild); preOrder(node.lastElementChild); } }
中間次走査の関数:
function inOrder(node) { if (!(node == null)) { inOrder(node.firstElementChild); pList.push(node); inOrder(node.lastElementChild); } }
事後探索関数:
function postOrder(node) { if (!(node == null)) { postOrder(node.firstElementChild); postOrder(node.lastElementChild); pList.push(node); } }
色変更関数:
function changeColor(){ var i=0; pList[i].style.backgroundColor = 'blue'; timer=setInterval(function(argument){ i++; if(i<pList.length){ pList[i-1].style.backgroundColor="#fff"; pList[i].style.backgroundColor="blue"; } else{ pList[pList.length-1].style.backgroundColor="#fff"; } },500) }
もともと深さ優先探索と幅優先探索を書きたかったのは上記のようなコードです。その後、バイナリ ツリーの深さ優先トラバースがプリオーダー トラバースと同じであることが発見されました。木の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> <p class="root"> <p class="child_1"> <p class="child_2"> <p class="child_3"></p> <p class="child_3"></p> </p> <p class="child_2"> <p class="child_3"></p> <p class="child_3"></p> </p> </p> <p class="child_1"> <p class="child_2"> <p class="child_3"></p> <p class="child_3"></p> </p> <p class="child_2"> <p class="child_3"></p> <p class="child_3"></p> </p> </p> </p> <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], pList = [], 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)){ pList.push(node); preOrder(node.firstElementChild); preOrder(node.lastElementChild); } } /*中序遍历*/ function inOrder(node) { if (!(node == null)) { inOrder(node.firstElementChild); pList.push(node); inOrder(node.lastElementChild); } } /*后序遍历*/ function postOrder(node) { if (!(node == null)) { postOrder(node.firstElementChild); postOrder(node.lastElementChild); pList.push(node); } } /*颜色变化函数*/ function changeColor(){ var i=0; pList[i].style.backgroundColor = 'blue'; timer=setInterval(function(argument){ i++; if(i<pList.length){ pList[i-1].style.backgroundColor="#fff"; pList[i].style.backgroundColor="blue"; } else{ pList[pList.length-1].style.backgroundColor="#fff"; } },500) } function reset(){ pList=[]; clearInterval(timer); var ps=document.getElementsByTagName("p"); for(var i=0;i ログイン後にコピー
バイナリツリーをトラバースするという考え方は同じであることがわかります。以前は JS をさまざまな特殊効果を記述するための言語だと考えていましたが、今ではそれは常に単純すぎます。
関連する推奨事項:
js実装データ構造:ツリーとバイナリツリー、バイナリツリートラバーサルと基本的な操作方法
以上がJavaScript は、バイナリ ツリーの事前順序、順序内、および順序後の走査メソッドを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。