<!DOCTYPE html>
<html>
<head>
<title>BinaryTree</title>
</head>
<body>
<script type="text/javascript">
function BinaryTree(){
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
var 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(node.right == null){
node.right = newNode;
}else{
insertNode(node.right,newNode);
}
}
}
//添加数据
this.insert = function(key){
var newNode = new Node(key);
if(root == null){
root =newNode;
}else{
insertNode(root,newNode);
}
}
//访问节点数据
var callback = function(key){
console.log(key);
}
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 preOrderTraverseNode = function(node,callback){
if (node!=null) {
callback(node.key);
preOrderTraverseNode(node.left,callback);
preOrderTraverseNode(node.right,callback);
}
}
//前序遍历
this.inOrderTraverse = function(callback){
preOrderTraverseNode(root,callback);
}
var postOrderTraverseNode = function(node,callback){
if (node!=null) {
postOrderTraverseNode(node.left,callback);
postOrderTraverseNode(node.right,callback);
callback(node.key);
}
}
//后序遍历
this.postOrderTraverse = function(callback){
postOrderTraverseNode(root,callback);
}
var searchNode = function(node,key){
if(node == null){
return false;
}else if(key<node.key){
searchNode(node.left,key);
}else if(key>node.key){
searchNode(node.right,key);
}else{
return true;
}
}
//查找节点
this.search = function(key){
return searchNode(root,key);
}
//找最小节点
var min = function(node){
if(node){
while(node && node.left!=null){
node = node.left;
}
return node.key;
}
return null;
}
this.findMin = function(){
return min(root);
}
//找最大节点
var max = function(node){
if(node){
while(node && node.right!=null){
node = node.right;
}
return node.key;
}
return null;
}
this.findMax = function(){
return max(root);
}
//找到右子树中的最小值 用来替换
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;
}else if(key < node.key){
return removeNode(node.left,key);
}else if(key > node.key){
return removeNode(node.right,key);
}else{
if(node.right==null&&node.left==null){
node = null;
}else if(node.left == null){
return node.right;
}else if(node.right == null){
return node.left;
}else{
var preNode = findMinNode(node);
node.key = preNode.key;
return removeNode(node.right,preNode.key);
}
}
}
this.remove = function(key){
return removeNode(root,key);
}
}
</script>
</body>
</html>
JavaScript实现二叉排序数
猜你喜欢
转载自blog.csdn.net/qq_41750725/article/details/81107000
今日推荐
周排行