<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compation" content="ie=edge"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0"/>
<title>Document</title>
</head>
<body>
</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 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.preOrderTraverse=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 nodes=[8,3,10,1,6,14,4,7,13];
var BinaryTree=new BinaryTree();
nodes.forEach(function(key){
BinaryTree.insert(key);
});
var callback=function(key){
console.log(key);
};
BinaryTree.inOrderTraverse(callback);//中序遍历
// BinaryTree.preOrderTraverse(callback);//前序遍历
// BinaryTree.postOrderTraverse(callback);//后序遍历
</script>
</html>
JavaScript实现二叉树中序遍历、前序遍历、后序遍历
猜你喜欢
转载自blog.csdn.net/YUHUI01/article/details/80855309
今日推荐
周排行