二叉查找树是由节点和边组成的。
我们可以定义一个节点类节点,里面存放节点的数据,及左右子节点,再定义一个用来显示数据的方法:
//以下定义一个节点类 函数节点(数据、左、右){//节点的键值 这一点。数据=https://www.yisu.com/zixun/data;//左节点 这一点。左=左;//右节点 这一点。右=左;//显示该节点的键值 这一点。显示=显示; }//实现显示方法 函数显示(){ 返回this.data; }
再定义一个二叉查找树类BST,该类中有定义树的根节点,初始化为null,然后定义插入节点的方法,还有一边遍历的方法:
//二叉查找树BST//有一个节点属性,还有一些其他的方法,以下定义一个二叉查找树BST类 函数BST () {//根节点初始化为空 这一点。根=零;//方法//插入 这一点。插入=插入;//中序遍历 这一点。只求=有条不紊地进行;//先序遍历 这一点。预订=预订;//后序遍历 这一点。后根次序=后缀次序; }//实现插入插入方法 函数插入(数据){//创建一个节点保存数据 var节点=新节点(数据,零,零);//下面将节点节点插入到树中//如果树是空的,就将节点设为根节点 如果(! this.root) { 这一点。根=节点; 其他}{//树不为空//判断插在父节点的左边还是右边//所以先要保存一下父节点/父母/var=this.root; var电流=this.root; var父母;//如果要插入的节点键值小于父节点键值,则插在父节点左边,//前提是父节点的左边为空,否则要将父节点往下移一层,//然后再做判断 而(真){//数据小于父节点的键值 父母=当前; 如果数据& lt;parent.data) {//将父节点往左下移(插入左边)//父=parent.left; 当前=current.left;//如果节点为空,则直接插入 如果当前(!){//! ! !此处特别注意,如果就这样把父母赋值为节点,也仅仅只是指母公司向节点,//而并没有加到父元素的左边! ! !根本没有加到树中去,所以要先记住父元素,再把当前元素加入进的去 的父母。左=节点; 打破; } 其他}{//将父节点往右下移(插入右边) 当前=current.right; 如果当前(!){ 的父母。正确的=节点; 打破; } } } } }//实现有条不紊地进行遍历方法(左中右) 函数中根次序(节点){ 如果(节点){ 有条不紊地进行(node.left); console.log (node.show ()); 有条不紊地进行(node.right); } }//先序遍历(中左右) 函数预订(节点){ 如果(节点){ console.log (node.show ()); 预订(node.left); 预订(node.right); } }//后序遍历(左右中) 函数后根次序(节点){ 如果(节点){ 预订(node.left); 预订(node.right); console.log (node.show ()); } } >之前测试:
//后序遍历(左右中) 函数后根次序(节点){ 如果(节点){ 后根次序(node.left); 后根次序(node.right); console.log (node.show ()); } }//实例化一个BST树 树var=new BST ();//添加节点 tree.insert (30); tree.insert (14); tree.insert (35); tree.insert (12); tree.insert (17);//中序遍历 tree.inorder (tree.root);//先序遍历 tree.preorder (tree.root);//后序遍历 tree.postorder (tree.root); >之前,结果:
中序遍历:
先序遍历:
后序遍历: