二叉树的常用遍历为前序遍历,中序遍历,后序遍历,三种遍历方法仅仅是交换了代码的运行顺序而已,代码如下:
function Node(data,left,right){
this.data=data;
this.left=left;
this.right=right;
}
function Tree(){
this.root=null;
}
Tree.prototype={
//创建二叉树
create: function(){
var b=new Node(2,new Node(4),new Node(5));
var c=new Node(3,new Node(6),new Node(7));
this.root=new Node(1,b,c);
},
//前序遍历
preTravel: function(root){
if(root==null){
return;
}
console.log(root.data);
this.preTravel(root.left);
this.preTravel(root.right);
},
//中序遍历
middleTravel: function(root){
if(root==null){
return;
}
this.middleTravel(root.left);
console.log(root.data);
this.middleTravel(root.right);
},
//后序遍历
postTravel: function(root){
if(root==null){
return;
}
this.middleTravel(root.left);
this.middleTravel(root.right);
console.log(root.data);
}
}
一开始的时候,准备为这些遍历方法传入一个默认参数this.root结果发现会导致死循环,最后发现是因为,后面会将undefined作为参数传入,此时会自动使用默认参数,进入死循环。
另外,定义原型方法时,调用另一个原型方法时,要在this作用域中查找。
测试代码如下:
var tree=new Tree();
tree.create();
tree.preTravel(tree.root);
tree.middleTravel(tree.root);
tree.postTravel(tree.root);