【解析 数据结构与算法-二叉树】

(1)为什么要使用二叉树?

    因为它通常结合了另外两种数据结构的优点:1:有序数组,2:链表。在树中查找数据项的速度和在有序数组中查找一样快,并且插入数据项和删除数据项也和链表一样。

   有序数组优缺点:

       优点: 随机访问速度快,用二分查找法速度快。

       缺点:插入,和删除都需要移动元素

     物理存储结构:一般都是连续的内存地址  (也可以用链式存储结构--特殊情况)

     链表优缺点

      优点:插入 和删除元素快

      缺点:查找数据项不容易,得从头遍历(或者双链表从尾遍历)

      物理存储结构:一般不是连续内存地址;

     逻辑结构

(1)集合结构 : 集合结构中的元素关系,除了同属于一个集合这个关系以外,再无其他关系。

(2)线性结构:线性结构中,元素间的关系就是一对一,顾名思义,一条线性的结构。

(3)树形结构:树形结构中,元素间的关系就是一对多,一颗大叔,伸展出的枝叶,也是类金字塔形。

(4)图形结构:图形结构中,元素间的关系就是多对多,举例:一个人可以通过6个人间接认识到世界上的每一个人。类蛛网形。

      物理结构

     顺序存储结构

      链式存储结构

   

  要是能有一种数据结构,既能像链表那样快速的插入和删除,又能像有序数组那样快速查找,那样就好了。

   C位出厂: 特殊的树状结构 ---二叉树

     常用术语:

     父节点、子节点、叶子节点、      子树、访问、遍历、层、关键字

    咱们要介绍的二叉树 叫 二叉搜索树

         二叉搜索树的特征定义: 一个节点的左子节点的关键字值小于这个阶段,右子节点的关键字值大于或等于这个父节点。

       二叉树在内存中有多种表示方式,最常用的方法是 把节点存在无关联的存储器中,而通过每个节点中指向自己节点的引用来链接。

       还可以再内存中用数组表示树,用存储在数组中相对的位置来表示节点在树中的位置。

    二叉树中序遍历可以按照从小到大顺序输出元素。

/**
 * 中序遍历
 *  二叉搜索树最常用的遍历方式是中序遍历
 *   中序遍历搜索会使所有的节点按照关键字升序被访问到。
 *   如果希望在二叉树中创建有序的数据序列,这是一种方法。
 *  遍历步骤:
 *    遍历树最简单的方法是用递归的方法。用递归的方法遍历整棵树要用一个节点
 *    作为参数。初始化时,这个节点是根。这个方法只需要做三件事:
 *    1.调用资深来遍历节点的左子树。
 *    2.访问这个节点
 *    3.调用自身来遍历节点的右子树
 *
 *
 * **/
public void inorder(Node nodeRoot){

    if(nodeRoot!=null){

        inorder(nodeRoot.getLeftNode());
        System.out.println("root.data"+nodeRoot.getData());
        inorder(nodeRoot.getRightNode());

    }

}

二叉树(不是二叉搜索树)可以用于表示包括二元运算符号 +、-、*、/的算术表达式。根节点保存运算符符号,其他节点或者存变了名(像A、B或C),或者保存运算符号。每一棵树都是一个合法的代数表达式。(使用场景有限-----!)

二叉搜索树中查找最大值,和最小值是特别容易的事情。

  要查找最小值,先走到根的左子节点处,然后接着走到那个叶子节点的左子节点。依次类推,直到找到一个没有叶子节点的左子节点的节点,这个节点就是最小值的节点。 最大值 也是一样的道理,只是左子节点变成又子节点了而已。

 

 

 

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值