前端面试题之手写二叉排序树
二叉排序树:每个节点的左节点都比根节点小,右节点都比根节点大
function TreeNode(data, left, right) { //节点结构
this.val = data;
this.left = left;
this.right = right;
}
function BST() { //二叉树构造函数
this.root = null; //默认是一颗空树
this.insert = function (data) { //添加节点功能
var newNode = new TreeNode(data, null, null); //首先构造一个二叉树节点
if(!this.root) { //如果是一个空树(空树根节点是null),直接把这个节点变成根节点
this.root = newNode;
}else {
this.insertNode(this.root, newNode) //不是空树的情况
}
};
this.insertNode = function (root, newNode) {
//首先判断将要加入的节点和目前节点的大小
if(newNode.val < root.val) { //如果比节点小
if(root.left === null) { //如果节点的左边是null
root.left = newNode; //直接添加到做节点
return; //返回
}
this.insertNode(root.left, newNode); //如果节点的左边不是空的(左边已经存在节点了),那就把左边的节点作为根节点递归
}else { //如果比节点大
if(root.right === null) { //如果节点的右边是null
root.right = newNode; //直接添加到做节点
return; //返回
}
this.insertNode(root.right, newNode); //如果节点的右边不是空的(左边已经存在节点了),那就把左边的节点作为根节点递归
}
//递归到最后找到为null的结点把它添加就完事
}
}
var bst = new BST();
bst.insert(12);
bst.insert(5);
bst.insert(17);
bst.insert(4);
bst.insert(6);
bst.insert(30);
console.log(bst);