第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
  • 排序二叉樹
    查看全部
  • 斷點調(diào)試,單步調(diào)試
    查看全部
  • 排序二叉樹:左孩子 <父節(jié)點< 右孩子? 兄弟節(jié)點? ?根節(jié)點


    查看全部
  • 源代碼:

    <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>Document</title>

    </head>

    <body>


    </body>

    <script type="text/javascript">

    function BinaryTree () {

    var Node = function (key) {

    this.key = key;

    this.left = null;

    this.right = null;

    }


    this.root = null;


    var insertNode = function (node,newNode) {

    if(newNode.key < node.key){

    if(node.left === null){

    node.left = newNode;

    }else{

    insertNode(node.left,newNode);

    }

    }else if(newNode.key > node.key){

    if(node.right === null){

    node.right = newNode;

    }else{

    insertNode(node.right,newNode);

    }

    }

    }



    this.insert = function (key) {

    if(this.root === null){

    this.root = new Node(key);

    }else{

    insertNode(this.root,new Node(key));

    }

    }

    //棧是先進后出的,所以在節(jié)點1的時候,它沒有左子節(jié)點,這個時候開始出棧,繼續(xù)執(zhí)行上一次的inOrderTraverceNodes里未執(zhí)行完的代碼,當節(jié)點1也沒有右子節(jié)點的時候,到節(jié)點3開始繼續(xù)執(zhí)行上一次的inOrderTraverceNodes里未執(zhí)行完的代碼,以此類推。


    //棧是先進后出的,一開始節(jié)點8執(zhí)行函數(shù),有左子節(jié)點3,節(jié)點3執(zhí)行函數(shù),有左子節(jié)點1,節(jié)點1執(zhí)行函數(shù),沒有左子節(jié)點,這時是null,這時這個函數(shù)已經(jīng)出棧,到節(jié)點1之前執(zhí)行的函數(shù)開始出棧了,然后調(diào)用callback,打印了1,然后節(jié)點1傳入node.right,這時又是null,然后這個函數(shù)出棧了,開始到節(jié)點3之前執(zhí)行的函數(shù)出棧了,所以進棧的順序是8,3,1,1的左null,出棧的順序是1的左null,1,1的右null,3,3執(zhí)行后,右邊有個6,6進棧,6有4,4進棧,這個時候棧里還有8,3,,6,4

    //中序遍歷代碼,先找左子節(jié)點,再找右子節(jié)點

    var inOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    inOrderTraverceNodes(node.left,callback);

    callback(node.key);//調(diào)動callback

    inOrderTraverceNodes(node.right,callback);

    }

    }


    this.inOrderTraverce = function (callback) {

    inOrderTraverceNodes(this.root,callback);

    }

    //前序遍歷代碼,先找自己,再找左子節(jié)點,再找右子節(jié)點

    var preOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    callback(node.key);//調(diào)動callback

    preOrderTraverceNodes(node.left,callback);

    preOrderTraverceNodes(node.right,callback);

    }

    }


    this.preOrderTraverce = function (callback) {

    preOrderTraverceNodes(this.root,callback);

    }


    //后序遍歷代碼,先找左子節(jié)點,再找右子節(jié)點,需要找完自己的左右子節(jié)點

    var postOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    postOrderTraverceNodes(node.left,callback);

    postOrderTraverceNodes(node.right,callback);

    callback(node.key);//調(diào)動callback

    }

    }


    this.postOrderTraverce = function (callback) {

    preOrderTraverceNodes(this.root,callback);

    }


    //查找最小值,只需要查找左子節(jié)點

    var minNode = function (node) {

    if(node){

    while (node && node.left !== null) {

    node = node.left;

    }

    return node.key;

    }

    return null;

    }


    this.min = function () {

    return minNode(this.root);

    }


    //查找最大值,只需要查找右子節(jié)點

    var maxNode = function (node) {

    if(node){

    while (node && node.right !== null) {

    node = node.right;

    }

    return node.key;

    }

    return null;

    }


    this.max = function () {

    return minNode(this.root);

    }


    //查找值x

    var searchNode = function (node,key) {

    if(node === null){

    return false;

    }


    if(key < node.key){

    return searchNode(node.left,key);

    }else if(key > node.key){

    return searchNode(node.right,key);

    }else{

    return true;

    }

    }


    this.search = function (key) {

    return searchNode(this.root,key);

    }



    //查找最小值,只需要查找左子節(jié)點

    var findMinNode = function (node) {

    if(node){

    while (node && node.left !== null) {

    node = node.left;

    }

    return node;

    }

    return null;

    }


    //刪除葉子節(jié)點

    var removeNode = function (node,key) {

    if(node === null){

    return null;

    }


    if(key < node.key){

    node.left = removeNode(node.left,key);

    return node;

    }else if(key > node.key){

    node.right = removeNode(node.right,key);

    return node;

    }else{

    if(node.left === null && node.right === null){

    node = null;

    return node;

    }


    if(node.left === null){

    //把右子節(jié)點覆蓋當前節(jié)點

    node = node.right;

    return node;

    }else if(node.right === null){

    //把右子節(jié)點覆蓋當前節(jié)點

    node = node.left;

    return node;

    }else{

    //例如刪除的是節(jié)點3,走到這里當前節(jié)點就是節(jié)點3了,傳入節(jié)點6,找到它的最小節(jié)點,返回當前節(jié)點,修改節(jié)點3的key為節(jié)點4,傳入節(jié)點6和要刪除的節(jié)點4,刪除后重新對節(jié)點6賦值,在返回其父節(jié)點4

    var aux = findMinNode(node.right);

    node.key = aux.key;

    node.right = removeNode(node.right,aux.key);

    return node;

    }

    }

    }


    this.remove = function (key) {

    removeNode(this.root,key);

    }

    }


    var nodes = [8,3,10,1,6,14,4,7,13];

    var binaryTree = new BinaryTree;

    nodes.forEach((key) =>{

    binaryTree.insert(key);

    })

    console.dir(binaryTree.root);

    var callback = function (key) {

    console.log(key);

    }

    // binaryTree.preOrderTraverce(callback);


    // console.log('this is min: ' + binaryTree.min());


    console.log('this is search: ' + binaryTree.search(7));

    console.log('this is search: ' + binaryTree.search(9));


    binaryTree.remove(1);

    </script>

    </html>


    查看全部
  • ? var inOrderTraverseNode = function (node,callback){

    ? ? ? ? ? if(node!==null){

    ? ? ? ? ? ? inOrderTraverseNode(node.left,callback);

    ? ? ? ? ? ? callback(node.key);

    ? ? ? ? ? ? inOrderTraverseNode(node.right,callback);

    ? ? ? ? ? }

    ? ? ? ? }


    ? ? ? ? this.inOrderTraverse = function(callback){

    ? ? ? ? ? inOrderTraverseNode(root,callback);

    ? ? ? ? }

    ? ? };


    ? ? var nodes=[8,3,1,6,14,4,7,13];

    ? ? var binaryTree=new BinaryTree();

    ? ? nodes.forEach(function(key){

    ? ? ? ? binaryTree.insert(key);

    ? ? });


    ? ? var callback=function(key){

    ? ? ? console.log(key);

    ? ? }


    ? ? binaryTree.inOrderTraverse(callback);


    查看全部
  • function(callback){

    }

    當我們要輸出某一個節(jié)點的值得時候,我們就把這個節(jié)點的值傳入這個回調(diào)函數(shù)中,讓這個回調(diào)函數(shù)決定怎么輸出出來

    查看全部
  • ==用于一般比較,===用于嚴格比較,==在比較的時候可以轉(zhuǎn)換數(shù)據(jù)類型,===嚴格比較,只要類型不匹配就返回flase

    查看全部
  • “==”是"==="

    var nodes=[8,3,1];

    查看全部
  • Node.js

    開發(fā)的APP可以在IOS和Android平臺上同時運行

    console.log("Hello World");

    在開發(fā)者工具中顯示

    單步調(diào)試

    查看全部
  • 編程入門
    查看全部
  • 后序遍歷---先遍歷左節(jié)點,然后遍歷右節(jié)點,最后打印當前父節(jié)點

    查看全部
  • 前序遍歷---相當于復(fù)制當前的二叉樹

    查看全部
  • 中序遍歷---先找左節(jié)點,然后父節(jié)點,最后右節(jié)點

    查看全部
  • public?static?final?String?node=?"xxxxx";
    //二叉樹前序遍歷復(fù)制數(shù)據(jù)最快


    查看全部
  • document.querySelector
    查看全部

舉報

0/150
提交
取消
課程須知
1、對html基礎(chǔ)知識已經(jīng)掌握。 2、對js的基本語法,例如數(shù)組,對象有一定的掌握。
老師告訴你能學(xué)到什么?
1、二叉樹的定義,創(chuàng)建以及js編碼實現(xiàn) 2、二叉樹中序遍歷的算法原理及js編碼實現(xiàn) 3、二叉樹前序遍歷的算法原理及js編碼實現(xiàn) 4、二叉樹后續(xù)遍歷的算法原理及js編碼實現(xiàn) 5、二叉樹節(jié)點查找的算法原理和編碼實現(xiàn)

微信掃碼,參與3人拼團

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!