前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构于JS也可以成为CP(九)Tree

数据结构于JS也可以成为CP(九)Tree

作者头像
萌兔IT
发布2019-07-26 13:44:38
7330
发布2019-07-26 13:44:38
举报
文章被收录于专栏:萌兔it萌兔it

,兔妞今天要继续为大家带来树啦,(小飘一下用个英文标题,哈哈)。树呢,是一种非线性的数据结构,由一组以边连接的节点组成,以分层的方式存储数据。树会被用在哪里呢?树被用来存储具有层级关系的数据以及存储有序列表。还记得?是什么样子不?

树的基本概念

根节点:一棵树最上面的节点。

父节点:一个节点下面连接多个节点。

叶子节点:一个节点虾米阿安所连接的节点。

路径:沿着一组特定的边,可以从一个节点走到另一个与它不直接相连的节点。从一个节点到另一个节点的这一组边成为路径。

树的遍历:以某种特定顺序访问树中所有的节点。

键:每个节点都有一个与之相关的值,该值则为键。

二叉树

二叉树又是个啥?这是一种特殊的树,特殊在哪里?它的节点个数不超过两个,这也保证了它的插入、查找、删除效率。那么对于这两个节点又要怎么利用呢?相对较小的值保存在左节点,相对较大的值保存在右节点中。下面就让我们看看二叉树如何实现的吧~树由节点组成,所以首先要创建一个node类来保存数据,我们还要有一个二叉查找树的类,然后要做的就是向类中插入节点咯。

插入节点的过程应该是这样的:

1)设根节点为当前节点。

2)如果待插入节点保存的数据小于当前节点,则设新的当前节点为原节点的左节点;反之,执行第 4 步。

3)如果当前节点的左节点为 null,就将新的节点插入这个位置,退出循环;反之,继续执行下一次循环。

4)设新的当前节点为原节点的右节点。

5)如果当前节点的右节点为 null,就将新的节点插入这个位置,退出循环;反之,继续执行下一次循环。

代码语言:javascript
复制
function Node(data, left, right) {
  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;
  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; 
        }
      } 
    }
  } 
}

二叉树的遍历

二叉树的遍历大概是面试必问题目了,那么我们就来看看都有什么遍历。中序、先序和后序。他们分别是什么呢?

1)中序遍历:按照节点上的键值,以升序访问BST 上的所有节点。

2)先序遍历先访问根节点,然后以同样方式访问左子树和右子树。

3)后序 遍历先访问叶子节点,从左子树到右子树,再到根节点。

看看怎么实现吧!

1)中序

代码语言:javascript
复制
function inOrder(node) {
   if (!(node == null)) {
      inOrder(node.left);
      putstr(node.show() + " ");
      inOrder(node.right);
   }
}

2)先序

代码语言:javascript
复制
function preOrder(node) {
   if (!(node == null)) {
      putstr(node.show() + " ");
      preOrder(node.left);
      preOrder(node.right);
    } 
}

3)后序

代码语言:javascript
复制
function postOrder(node) {
  if (!(node == null)) {
     postOrder(node.left);
     postOrder(node.right);
     putstr(node.show() + " ");
  }
}

二叉树的应用

二叉树介绍完了,让我们看看这种数据结构提供了什么便利。

1)找最大值、最小值:按照二叉树的特点左节点永远是较小值、右节点永远是较大值,那么找最大、最小值是不是就方便很多呢?

2)找特定的数:还是按照二叉树的特性,我们通过判断节点的大小就可以判断顺着哪个分支走下去,那么工作量是不是就少了一半呢?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萌兔it 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档