博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用JS实现二叉树
阅读量:6756 次
发布时间:2019-06-26

本文共 4434 字,大约阅读时间需要 14 分钟。

用JS实现二叉树数据结构, 完成遍历、查找最大/小值、查找特定值以及删除节点的操作。

//定义节点class Node {    constructor(data){        this.root = this;        this.data = data;        this.left = null;        this.right = null    }}//创建二叉搜索树(BST))class BinarySearchTree {    constructor(){    this.root = null    }    //插入节点    insert(data){        const newNode = new Node(data);        const insertNode = (node,newNode) => {            if (newNode.data < node.data){                if(node.left === null){                    node.left = newNode                }else {                    insertNode(node.left,newNode)                }            }else {                if(node.right === null){                    node.right = newNode                }else{                    insertNode(node.right,newNode)                }            }        };        if(!this.root){            this.root = newNode        }else {            insertNode(this.root,newNode)        }    }    //中序遍历    inOrder(){        let backs = [];        const inOrderNode = (node,callback) => {            if(node !== null){                inOrderNode(node.left,callback);                backs.push(callback(node.data));                inOrderNode(node.right,callback)            }        };        inOrderNode(this.root,callback);        function callback(v){            return v        }        return backs    }    //前序遍历    preOrder(){        let backs = [];        const preOrderNode = (node,callback) => {            if(node !== null){                backs.push(callback(node.data));                preOrderNode(node.left,callback);                preOrderNode(node.right,callback)            }        };        preOrderNode(this.root,callback);        function callback(v){            return v        }        return backs    }    //后序遍历    postOrder(){        let backs = [];        const postOrderNode = (node,callback) => {            if(node !== null){                postOrderNode(node.left,callback);                postOrderNode(node.right,callback);                backs.push(callback(node.data))            }        };        postOrderNode(this.root,callback);        function callback(v){            return v        }        return backs    }    //查找最小值    getMin(node){        const minNode = node => {            return node? (node.left? minNode(node.left):node):null        };        return minNode( node || this.root)    }    //查找最大值    getMax(node){        const minNode = node => {            return node? (node.right? minNode(node.right):node):null        };        return minNode(node || this.root)    }    //查找特定值    find(data){        const findNode = (node,data) => {            if(node===null) return false;            if(node.data===data) return node;            return findNode((data < node.data)? node.left: node.right,data)        };        return findNode(this.root,data)    }    //删除节点    remove(data){        const removeNode = (node,data) => {            if(node === null) return null;            if(node.data === data){                if(node.left === null && node.right === null) return null;                if(node.left === null) return node.right;                if(node.right === null) return node.left;                if(node.left !==null && node.right !==null){                let _node = this.getMin(node.right);                node.data = _node.data;                node.right = removeNode(node.right,data);                return node                }            } else if(data < node.data){                node.left=removeNode(node.left,data);                return node            } else {                node.right=removeNode(node.right,data);                return node            }        };        return removeNode(this.root,data)    }} //创建BSTconst tree = new BinarySearchTree();tree.insert(11);tree.insert(7);tree.insert(5);tree.insert(3);tree.insert(9);tree.insert(8);tree.insert(10);tree.insert(13);tree.insert(12);tree.insert(14);tree.insert(20);tree.insert(18);tree.insert(25);console.log(tree);console.log(tree.root);//中序遍历BSTconsole.log(tree.inOrder());//前序遍历BSTconsole.log(tree.preOrder());//后序遍历BSTconsole.log(tree.postOrder());//搜索最小值console.log(tree.getMin());//搜索最大值console.log(tree.getMax());//查找特定值console.log(tree.find(2));console.log(tree.find(3));console.log(tree.find(20));//删除节点,返回新的二叉树,不改变原来的二叉树console.log(tree.remove(11));a=tree.remove(11);console.log(a.root);console.log(tree);

 

转载于:https://www.cnblogs.com/SofiaTJU/p/9297164.html

你可能感兴趣的文章
layout中加载gif图片
查看>>
::符号
查看>>
“零甲醛”真的无污染?美博士环保开展调研
查看>>
unity博客 推荐(不断补充)
查看>>
图形处理的一些知识
查看>>
XPath
查看>>
[转]Shell脚本中获取SELECT结果值的方法
查看>>
No.2----数据类型(常用的)
查看>>
字符串指针
查看>>
锐捷网关交换机开启dhcp服务
查看>>
android 窃听电话
查看>>
链表例题
查看>>
POJ-1321 棋盘问题 搜索
查看>>
HDU-4478 Where is the King 搜索
查看>>
将博客搬至CSDN
查看>>
大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1....
查看>>
在ie9浏览器中ajax请求数据始终执行error的问题解决
查看>>
类和原型之工厂模式!
查看>>
hdu 5396 Expression
查看>>
时间选择器(js,css,html)
查看>>