博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js树形结构-----(BST)二叉树增删查
阅读量:4609 次
发布时间:2019-06-09

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

function BinarySearchTree(){			var cnodes = function(key){				this.key = key;				this.left = null;				this.right = null;			}						var root = null;						this.insert = function(key){				var nodes = new cnodes(key);				if(root === null){					root = nodes;				}else{					insertNode(root,nodes);				}			}						function insertNode(rnode,newnode){				if(newnode.key  <  rnode.key){					if(rnode.left  === null){						rnode.left = newnode;					}else{						insertNode(rnode.left,newnode);					}				}else{					if(rnode.right === null){						rnode.right = newnode;					}else{						insertNode(rnode.right , newnode );					}				}			}						//中序遍历			this.inOrderTraverse = function(callback){				inOrderTraverseNode(root, callback);				};			function inOrderTraverseNode(cnode,callback){				if(cnode !== null){					inOrderTraverseNode(cnode.left,callback );					callback(cnode.key);					inOrderTraverseNode(cnode.right,callback );				}			}						//先序遍历			this.preOrderTraverse = function(callback){				preOrderTraverseNode(root, callback);			};			var preOrderTraverseNode = function (node, callback) {				if (node !== null) {				callback(node.key); 					preOrderTraverseNode(node.left, callback); 					preOrderTraverseNode(node.right, callback); 				}			};						//后序遍历			this.postOrderTraverse = function(callback){				postOrderTraverseNode(root, callback);			};			function postOrderTraverseNode(cnode, callback){				if(cnode !== null){					postOrderTraverseNode(cnode.left, callback);					postOrderTraverseNode(cnode.right, callback);					callback(cnode.key);				}			}						//搜索最小值			this.min = function(){				return minNode(root);			};						function minNode(cnode){				if(cnode){					while(cnode && cnode.left !== null){						cnode = cnode.left;						}					return cnode.key;				}				return null;			}						this.max = function(){				return maxNode(root);			}			function maxNode(cnode){				if(cnode){					while(cnode && cnode.right !== null){						cnode = cnode.right;					}					return cnode.key;				}				return null;			}						this.search = function(key){				return searchNode(root,key);				};						function searchNode(cnode,key){				if(cnode === null){					return false;				}								if(key < cnode.key){					return searchNode(cnode.left,key);				}else if(key > cnode.key){					return searchNode(cnode.right,key);				}else{					return true;				}			}						//删除			this.remove = function(key){				root = removeNode(root,key);			};						function removeNode(cnode,key){				if(cnode == null){					return null;				}				if(key < cnode.key){					cnode.left = removeNode(cnode.left , key);					return cnode;				}else if(key  > cnode.key){					cnode.right = removeNode(cnode.right , key);					return cnode;				}else{					//等于的时候					//第一种情况,一个叶节点					if(cnode.left === null && cnode.right === null){						cnode = null;						return cnode;					}										//第二种情况,一个子节点					if(cnode.left === null){						cnode = cnode.right;						return cnode;					}else if(cnode.right === null){						cnode = cnode.left;						return cnode;					}					//第三种情况,两个子节点					//1找到要删除的节点					//2找到该节点,右侧子树中的最小节点,替换自己					//3删掉右侧子树中的最小节点					var aux = findMinNode(cnode.right);					cnode.key = aux.key;					cnode.right = removeNode(cnode.right,aux.key);					return cnode;				}			}			var findMinNode = function(node){				//右侧子树中最小节点的键去更新这个节点的值				while (node && node.left !== null) {					node = node.left;					}				return node;			};		}				var tree  = new BinarySearchTree();		tree.insert(11);		tree.insert(7);		tree.insert(15);		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);		tree.insert(6);				tree.inOrderTraverse(function(key){			console.log(key);		});		tree.remove(15);		console.log("-----------");		tree.inOrderTraverse(function(key){			console.log(key);		});

  

转载于:https://www.cnblogs.com/muamaker/p/9204258.html

你可能感兴趣的文章
UIApplicationDelegate协议
查看>>
Jmeter测试dubbo接口填坑
查看>>
[zz]GDB调试精粹及使用实例
查看>>
数据库的创建和删除
查看>>
最简单的三层实例【插入据
查看>>
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
Linux(2)_常用命令2
查看>>
自定义分页
查看>>
[转]DELPHI——调试(1)
查看>>
JS秒数转成分秒时间格式
查看>>
xp_cmdshell 命令的开启与关闭,和状态查询
查看>>
Linux sudoers
查看>>
MySQL详解(18)-----------分页方法总结
查看>>
bzoj 4595 激光发生器
查看>>
multi cookie & read bug
查看>>
js时间转换
查看>>