二叉查找数由节点组成,我们要定义的第一个对象就是node,该对象和前面介绍链表时的对象类似,node类的定义如下
function Node(data,left,right){ this.data = data; this.left = left; this.right = right; this.show = show } function show(){ return this.data; }
现在创建一个类,用来表示二叉树(BST) 。我们让类只包含一个数据成员:一个表示二叉树查找树节点的node对象。该类的构造函数将跟节点初始化为 null,以此创建一个空节点。
1.BST首先有一个insert() 方法用来像数组中加入新节点。
2.检查BST是否有根节点,如果没有,那么这是课新树,该节点就是跟节点
3.如果插入的节点不是根节点,那么就需要准备遍历BST,找到插入的适当位置,该过程类似遍历链表。用一个变量存储当前节点,一层一层地遍历BST
进入BST以后,下一步就是决定将节点放在哪个地方。找到正确的插入点时,会跳出循环
(1)设根节点为当前节点
(2)如果待插入节点保存的数据小于当前节点,则设新的当前节点为原节点的左节点
(3)如果当前节点的左节点为null,就将新的节点插入这个位置,退出循环,反之,继续执行下一循环
(4)设新的当前节点为原节点的右节点
(5)如果执行当前节点的右节点为null,就将新的节点插入这个位置,退出循环,反之,继续执行下一次循环
function BST(){ this.root = null; this.insert = insert; this.inOrder = inOrder; } function insert(data){ var n = new Node(data,null,null) if(this.root == null){ this.root = n }else { var current = this.root; var parent while(true){ parent = current; if(data < current.data){ current = current.left if(current == null){ parent.left = n break; } } else{ current = current.right; if(current == null){ parent.right = n; break; } } } } }