• 二叉树的创建,插入,查找,清空和比较


    二叉树的结构

    function TreeNode(){
        this.val = val;
        this.left = null;
        this.right = null;
    }

    二叉树的创建

    function createBTree(aVal,fPredicate,pos){
        var node = {};
        pos = pos || 0;
        if(fPredicate(aVal,pos) || !aVal[pos]){
            return null;
        }
        else{
            node.val = aVal[pos];
            node.left = createBTree(aVal,fPredicate,2*pos+1);
            node.right = createBTree(aVal,fPredicate,2*pos+2);
        }
        return node;
    }

    二叉树的插入节点

    function BTreeInsert(root,val,direction,node){
        if(root == null){
            return false;
        }
        if(root.val === val){
            switch(direction){
                case 'left':
                    if(root.left){
                        //throw new Error('left node already exists');
                        return false;
                    }
                    else{
                        root.left = node;
                    }
                    break;
                case 'right':
                    if(root.right){
                        //throw new Error('right node already exists');
                        return false;
                    }
                    else{
                        root.right = node;
                    }
                    break;
            }
        }
        else{
            BTreeInsert(root.left,node,val,direction);
            BTreeInsert(root.right,node,val,direction);
        }
        return true;
    }

    二叉树的查找节点

    function DLRFind(root, val) {
        if (root == null) {
            return null;
        }
        if (root.val === val) {
            return root;
        }
        return DLRFind(root.left, val) || DLRFind(root.right, val);
    }

    二叉树的比较

    function BTreeCompare(root1,root2){
        if(root1 == null && root2 == null){
            return true;
        }
        else if(root1 != null && root2 != null){
            return BTreeCompare(root1.left,root2.left)
                && BTreeCompare(root1.right,root2.right);
        }   
        else{
            return false;
        }
    }

    清空二叉树

    function BTreeClear(root){
        if(root == null){
            return true;
        }
        BTreeClear(root.left);
        BTreeClear(root.right);
        root = null;
        return true;
    }

    测试代码

    var root = createBTree([3, 2, 4, 6, 7, 8, 1, 0], function (aVal, pos) {
        return aVal[pos] == 0 || pos > 8
    }, 0);
    DLR(root);//output 3 2 6 7 4 8 1
    DLRFind(root,2);//output node 2
    DLRFind(root,11);//output null
    
    function createBTree(aVal, fPredicate, pos) {
        var node = {};
        pos = pos || 0;
        if (fPredicate(aVal, pos) || !aVal[pos]) {
            return null;
        } else {
            node.val = aVal[pos];
            node.left = createBTree(aVal, fPredicate, 2 * pos + 1);
            node.right = createBTree(aVal, fPredicate, 2 * pos + 2);
        }
        return node;
    }
    
    function DLR(root) {
        if (root == null) {
            return null;
        } 
        else {
            console.log('d ' + root.val);
            DLR(root.left);
            DLR(root.right);
        }
    }
    
    function DLRFind(root, val) {
        if (root == null) {
            return null;
        }
        if (root.val === val) {
            return root;
        }
        return DLRFind(root.left, val) || DLRFind(root.right, val);
    }
  • 相关阅读:
    编辑器、编译器、文件、IDE等常见概念辨析
    二叉排序树的实现
    模板
    Codeforces Round #690 (Div. 3)
    Educational Codeforces Round 100 (Rated for Div. 2)
    Codeforces 414-B. Mashmokh and ACM(数位dp)
    Codeforces 339D-Xenia and Bit Operations(线段树)
    Educational Codeforces Round 96 (Rated for Div. 2) 题解
    2019-2020 ICPC Northwestern European Regional Programming Contest (NWERC 2019)
    2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018)
  • 原文地址:https://www.cnblogs.com/mengff/p/6849835.html
Copyright © 2020-2023  润新知