亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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


    查看全部
  • 源代碼:

    <!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));

    }

    }

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


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

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

    var inOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    inOrderTraverceNodes(node.left,callback);

    callback(node.key);//調動callback

    inOrderTraverceNodes(node.right,callback);

    }

    }


    this.inOrderTraverce = function (callback) {

    inOrderTraverceNodes(this.root,callback);

    }

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

    var preOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    callback(node.key);//調動callback

    preOrderTraverceNodes(node.left,callback);

    preOrderTraverceNodes(node.right,callback);

    }

    }


    this.preOrderTraverce = function (callback) {

    preOrderTraverceNodes(this.root,callback);

    }


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

    var postOrderTraverceNodes = function (node,callback) {

    if(node !== null){

    postOrderTraverceNodes(node.left,callback);

    postOrderTraverceNodes(node.right,callback);

    callback(node.key);//調動callback

    }

    }


    this.postOrderTraverce = function (callback) {

    preOrderTraverceNodes(this.root,callback);

    }


    //查找最小值,只需要查找左子節點

    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);

    }


    //查找最大值,只需要查找右子節點

    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);

    }



    //查找最小值,只需要查找左子節點

    var findMinNode = function (node) {

    if(node){

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

    node = node.left;

    }

    return node;

    }

    return null;

    }


    //刪除葉子節點

    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){

    //把右子節點覆蓋當前節點

    node = node.right;

    return node;

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

    //把右子節點覆蓋當前節點

    node = node.left;

    return node;

    }else{

    //例如刪除的是節點3,走到這里當前節點就是節點3了,傳入節點6,找到它的最小節點,返回當前節點,修改節點3的key為節點4,傳入節點6和要刪除的節點4,刪除后重新對節點6賦值,在返回其父節點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){

    }

    當我們要輸出某一個節點的值得時候,我們就把這個節點的值傳入這個回調函數中,讓這個回調函數決定怎么輸出出來

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

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

    var nodes=[8,3,1];

    查看全部
  • Node.js

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

    console.log("Hello World");

    在開發者工具中顯示

    單步調試

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

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

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

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


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

舉報

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

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!