javascript数据结构与算法--二叉树
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因此current 不等于null,所以就执行到下一次while循环,继续进入while中的if判断,由于当前的根节点是16,所以也就进入了if里面的代码去执行,在执行这句代码后:
current = current.left; 由上图可知:current = null;current就等于null了;再执行代码如下:
if(current == null) {
parent.right = n;
break;
}
就把99节点插入到当前的根节点为45节点的右节点了。
7. 执行 insert(22);的时候,由于根节点为23,所以节点22 小于 23,所以进入while中的if语句里面了,那么当前current值如下:
当执行 current = current.left; 的时候,那么current值变为如下所示:
this.data = data;
this.left = left;
this.right = right;
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
inOrder(nums.root);
2. 先序:先序遍历先访问根节点,然后以同样方式访问左子树和右子树。如下图所示:代码如下:
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}else {
current = current.right;
if(current == null) {
parent.right = n;
break;
}
}
}
}
}
初始代码如下:
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
示意图如下:
1. 执行insert(23)时候,由于根节点== null 所以根节点为23.
parent.left = n;
break;
}
}
Current = current.left 因此current = null; 继续执行上面的if语句判断是否为null的时候,因此就把37放入根节点为45的左节点上了。
5. 直接执行insert(3); 的时候,根节点不为空,所以就进入else语句的while语句中,由于当前的data = 3,所以执行如下if判断代码:
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}else {
current = current.right;
if(current == null) {
parent.right = n;
break;
}
}
}
}
}
// 中序遍历
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
this.inOrder = inOrder;
}
function insert(data) {
再接着执行代码:
if(current == null) {
parent.right = n;
break;
}
如上图所示,current并不等于null,所以执行下一次while循环,继续进入while中的else语句,那么当前的current值如下:
当执行current = current.right;这句代码的时候,那么current 就等于 null了,所以执行if语句代码如下:
this.inOrder = inOrder;
}
function insert(data) {
var n = new Node(data,null,null);
if(this.root == null) {
以上是插入节点的整个流程!
遍历二叉树的方法有三种,中序,先序和后序。
1. 中序;
如下图所示:
中序遍历使用递归的方式实现,该方法需要以升序访问树中的所有节点,先访问左子树,再访问根节点,最后访问右子树。
代码如下:
// 中序遍历
function inOrder(node) {
if(!(node == null)) {
var n = new Node(data,null,null);
if(this.root == null) {
this.root = n;
}else {
var current = this.root;
var parent;
while(current) {
parent = current;
if(data < current.data) {
// 先序遍历
function preOrder(node) {
if(!(node == null)) {
console.log(node.show());
preOrder(node.left);
preOrder(node.right);
}
}
JS所有代码如下:
function Node(data,left,right) {
那么parent = 45的那个节点了,current值如下所示:
接着进入if语句判断,由于当前的根节点是45,所以37 小于根节点 45了,所以就进入if语句代码如下:
if(data < current.data) {
current = current.left;
if(current == null) {
您使用的浏览器不受支持建议使用新版浏览器
javascript数据结构与算法--二叉树
树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存储有序列表。我们要研究的是二叉树,在二叉树上查找元素非常快,为二叉树添加元素或者删除元素,也是非常快的。
if(current == null) {
parent.right = n;
break;
}
所以45为根节点的右节点了。跳出循环语句;
3. 执行insert(16)的时候,根节点不等于null,因此进入while语句,由于16 < 小于根节点23,所以就进入if语句,那么当前的current值如下:当执行到 current = current.left; 的时候,current的值就变为null,所以接着往下执行代码:
if(current == null) {
parent.left = n;
break;
}
就把当前的节点16插入到根节点的左节点上。
4. 接着执行 insert(37) 的时候,根节点不等于null,因此进入else语句中的while语句,由于37 大于根节点23,所以就进入while语句中的else语句,当前的current值为:
下面我们来学习插入节点的操作吧!
1. 二叉树是由节点组成的,所以我们需要定义一个对象node,可以保存数据,也可以保存其他节点的链接(left 和 right),show()方法用来显示保存在节点中的数据。Node代码如下:
function Node(data,left,right) {
this.data = data;
2. 执行insert(45)的时候,根节点不等于null,因此进入while语句;由于45 > 大于根节点23 所以就进入else语句,当前current的值如下图:当执行 current = current.right; 这句代码时候,当前current值变为null了,然后进行if判断代码如下:
树的基本结构示意图如下:
我们现在最主要的是要来学习二叉树,二叉树是一种特殊的树,它的特征是子节点个数不超过2个。如下图就是二叉树的基本结构示意图如下:
二叉树是一种特殊的树,相对较少的值保存在左节点上,较大的值保存在右节点中。这一特性使得查找的效率非常高,对于数值型和非数值型的数据,比如单词和字符串都是一样。
var n = new Node(data,null,null);
if(this.root == null) {
this.root = n;
}else {
var current = this.root;
var parent;
while(current) {
parent = current;
if(data < current.data) {
if(current == null) {
parent.left = n;
break;
}
就把节点3 插入到当前的根节点为16的左节点了。
6. 执行insert(99)的时候;当前的根节点23 小于 99,那么就进入else语句了,那么current值就等于如下:
当执行 current = current.right; 的时候,那么current 就等于如下:
if(data < current.data) {
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}
插入的节点值3 小于根节点23,进入if语句里面执行,但是当前的current值如下:
所以当执行 current = current.left 的时候,那么current = 16的那个节点了,如下所示:
当执行current = current.right;这句代码的时候,那么当前current = 45的那个节点(如上图所示);当再执行下面的代码:
if(current == null) {
parent.right = n;
break;
}
那么current != null 所以接着进入下一次while循环,执行这句代码后;parent = current;
所以执行 if语句代码如下:
if(current == null) {
parent.left = n;
break;
}
不等于null,所以斤进入while下一次循环,由于当前的根节点16 小于插入的节点22 ,所以就进入else语句了,那么当前的current值如下:再执行这句代码 current = current.right; 那么current就等于null了;因此就把节点22插入到根节点为16上面的右节点上了;
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
this.inOrder = inOrder;
}
function insert(data) {
inOrder(node.left);
console.log(node.show());
inOrder(node.right);
}
}
代码分析如下:
JS所有代码如下:
function Node(data,left,right) {
this.data = data;
this.left = left;
this.right = right;
function inOrder(node) {
if(!(node == null)) {
inOrder(node.left);
console.log(node.show());
inOrder(node.right);
}
}
代码初始化如下:
var nums = new BST();
nums.insert(23);
this.left = left;
this.right = right;
this.show = show;
}
插入节点分析如下:
代码如下:
function Node(data,left,right) {
this.data = data;
this.left = eft;
this.right = right;
current = current.left; 由上图可知:current = null;current就等于null了;再执行代码如下:
if(current == null) {
parent.right = n;
break;
}
就把99节点插入到当前的根节点为45节点的右节点了。
7. 执行 insert(22);的时候,由于根节点为23,所以节点22 小于 23,所以进入while中的if语句里面了,那么当前current值如下:
当执行 current = current.left; 的时候,那么current值变为如下所示:
this.data = data;
this.left = left;
this.right = right;
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
inOrder(nums.root);
2. 先序:先序遍历先访问根节点,然后以同样方式访问左子树和右子树。如下图所示:代码如下:
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}else {
current = current.right;
if(current == null) {
parent.right = n;
break;
}
}
}
}
}
初始代码如下:
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
示意图如下:
1. 执行insert(23)时候,由于根节点== null 所以根节点为23.
parent.left = n;
break;
}
}
Current = current.left 因此current = null; 继续执行上面的if语句判断是否为null的时候,因此就把37放入根节点为45的左节点上了。
5. 直接执行insert(3); 的时候,根节点不为空,所以就进入else语句的while语句中,由于当前的data = 3,所以执行如下if判断代码:
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}else {
current = current.right;
if(current == null) {
parent.right = n;
break;
}
}
}
}
}
// 中序遍历
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
this.inOrder = inOrder;
}
function insert(data) {
再接着执行代码:
if(current == null) {
parent.right = n;
break;
}
如上图所示,current并不等于null,所以执行下一次while循环,继续进入while中的else语句,那么当前的current值如下:
当执行current = current.right;这句代码的时候,那么current 就等于 null了,所以执行if语句代码如下:
this.inOrder = inOrder;
}
function insert(data) {
var n = new Node(data,null,null);
if(this.root == null) {
以上是插入节点的整个流程!
遍历二叉树的方法有三种,中序,先序和后序。
1. 中序;
如下图所示:
中序遍历使用递归的方式实现,该方法需要以升序访问树中的所有节点,先访问左子树,再访问根节点,最后访问右子树。
代码如下:
// 中序遍历
function inOrder(node) {
if(!(node == null)) {
var n = new Node(data,null,null);
if(this.root == null) {
this.root = n;
}else {
var current = this.root;
var parent;
while(current) {
parent = current;
if(data < current.data) {
// 先序遍历
function preOrder(node) {
if(!(node == null)) {
console.log(node.show());
preOrder(node.left);
preOrder(node.right);
}
}
JS所有代码如下:
function Node(data,left,right) {
那么parent = 45的那个节点了,current值如下所示:
接着进入if语句判断,由于当前的根节点是45,所以37 小于根节点 45了,所以就进入if语句代码如下:
if(data < current.data) {
current = current.left;
if(current == null) {
您使用的浏览器不受支持建议使用新版浏览器
javascript数据结构与算法--二叉树
树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存储有序列表。我们要研究的是二叉树,在二叉树上查找元素非常快,为二叉树添加元素或者删除元素,也是非常快的。
if(current == null) {
parent.right = n;
break;
}
所以45为根节点的右节点了。跳出循环语句;
3. 执行insert(16)的时候,根节点不等于null,因此进入while语句,由于16 < 小于根节点23,所以就进入if语句,那么当前的current值如下:当执行到 current = current.left; 的时候,current的值就变为null,所以接着往下执行代码:
if(current == null) {
parent.left = n;
break;
}
就把当前的节点16插入到根节点的左节点上。
4. 接着执行 insert(37) 的时候,根节点不等于null,因此进入else语句中的while语句,由于37 大于根节点23,所以就进入while语句中的else语句,当前的current值为:
下面我们来学习插入节点的操作吧!
1. 二叉树是由节点组成的,所以我们需要定义一个对象node,可以保存数据,也可以保存其他节点的链接(left 和 right),show()方法用来显示保存在节点中的数据。Node代码如下:
function Node(data,left,right) {
this.data = data;
2. 执行insert(45)的时候,根节点不等于null,因此进入while语句;由于45 > 大于根节点23 所以就进入else语句,当前current的值如下图:当执行 current = current.right; 这句代码时候,当前current值变为null了,然后进行if判断代码如下:
树的基本结构示意图如下:
我们现在最主要的是要来学习二叉树,二叉树是一种特殊的树,它的特征是子节点个数不超过2个。如下图就是二叉树的基本结构示意图如下:
二叉树是一种特殊的树,相对较少的值保存在左节点上,较大的值保存在右节点中。这一特性使得查找的效率非常高,对于数值型和非数值型的数据,比如单词和字符串都是一样。
var n = new Node(data,null,null);
if(this.root == null) {
this.root = n;
}else {
var current = this.root;
var parent;
while(current) {
parent = current;
if(data < current.data) {
if(current == null) {
parent.left = n;
break;
}
就把节点3 插入到当前的根节点为16的左节点了。
6. 执行insert(99)的时候;当前的根节点23 小于 99,那么就进入else语句了,那么current值就等于如下:
当执行 current = current.right; 的时候,那么current 就等于如下:
if(data < current.data) {
current = current.left;
if(current == null) {
parent.left = n;
break;
}
}
插入的节点值3 小于根节点23,进入if语句里面执行,但是当前的current值如下:
所以当执行 current = current.left 的时候,那么current = 16的那个节点了,如下所示:
当执行current = current.right;这句代码的时候,那么当前current = 45的那个节点(如上图所示);当再执行下面的代码:
if(current == null) {
parent.right = n;
break;
}
那么current != null 所以接着进入下一次while循环,执行这句代码后;parent = current;
所以执行 if语句代码如下:
if(current == null) {
parent.left = n;
break;
}
不等于null,所以斤进入while下一次循环,由于当前的根节点16 小于插入的节点22 ,所以就进入else语句了,那么当前的current值如下:再执行这句代码 current = current.right; 那么current就等于null了;因此就把节点22插入到根节点为16上面的右节点上了;
this.show = show;
}
function show() {
return this.data;
}
function BST() {
this.root = null;
this.insert = insert;
this.inOrder = inOrder;
}
function insert(data) {
inOrder(node.left);
console.log(node.show());
inOrder(node.right);
}
}
代码分析如下:
JS所有代码如下:
function Node(data,left,right) {
this.data = data;
this.left = left;
this.right = right;
function inOrder(node) {
if(!(node == null)) {
inOrder(node.left);
console.log(node.show());
inOrder(node.right);
}
}
代码初始化如下:
var nums = new BST();
nums.insert(23);
this.left = left;
this.right = right;
this.show = show;
}
插入节点分析如下:
代码如下:
function Node(data,left,right) {
this.data = data;
this.left = eft;
this.right = right;