当前位置: 首页 > news >正文

数据结构之 二叉树

对象由指针所构成的关系有很多种,如果没有循环可以广义称为树,否则称为图。

而二叉树是一种特殊的树形结构。常用与二叉树排序的应用。
二叉树的定义:  每个结点最多有两个子树的结构称为二叉树。所以两个分叉可以分别称为左子树和右子树
根节点:每棵树中只有1个根节点
中间节点:有一个或两个孩子
叶子节点:没有子节点的节点
 
 
前序遍历(先根序遍历):原理 根——>左——>右  先访问根节点,再访问左子树,在访问右子树
中序遍历:                        原理 左——>根——>右  先访问左子树,再访问根节点,在访问右子树
后序:                               原理 左——>右——>根  先访问左子树,再访问右子树,在访问根节点
那么上图的前序遍历 :ABCDEFGHK        中序遍历:BDCAEHGKF 这里后序就不写了
重点举例:中须遍历 
1、先访问左子树 所以先排序 BCD。
2、在BCD中 B节点为根节点 而不存在子节点 所以第一个就是B,而B的子节点是一棵树,所以在此暂时不对C进行排序
3、当前C节点下有一个左叶子节点,按照(左根右)的排序规则,就应该是DC 那么联合B 目前的排序就是BDC
4、在中序遍历中 先访问左子树 --->根节点----->右子树的规则,第四个就是根节点A   目前BDCA
5、剩下EFGHK 这个节点组成的右子树,第一个E根节点下只有右节点而右节点是一颗树,所以只能排E这个节点  BDCAE
6、F节点是棵树,而G作为F节点的左子节点也是颗树 无法排序,继续往下,H左叶子节点 OK就是它了  HGK 这个树就排好了
7、剩下F 因为F作为根节点 排完左子树后就排根节点,所以现在就是F  HGKF 该节点没有右子树,所以将之前排序的合并 就是上面写的 BDCAEHGKF
 
以下通过java 实现二叉树排序
/**
 * 二叉树的遍历
 * 12 9 5 8 11 20  通过二叉树排序  增加一个规则如果加入的节点比本身节点小,那么放在左边否则放在右边
 * 第一步 将 12 作为根节点 
 * 第二步 由于 9<12 所以9作为根节点的左叶子节点
 * 第三步 5<12 放左边但左边已经有了一个左叶子节点 所以应该放 在9这个节点的下方作为左节点、
 * 同理后面也依次排序,最后二叉树如下:
 *           12
 *          /    \
 *         9      20
 *       /   \ 
 *      5     11
 *       \
 *        8    
 * @author Administrator
 * 在java 中 treeMap 就是实现二叉树而提供的集合。
 * 博客地址:二叉树的理解  
 */
public class Binary {

    private int data;
    private Binary left;    
    private Binary right;
    public  Binary(int i) {
        data=i;
    }
    public void add(Binary binary) {
        //根据之前的逻辑 就应该是将 当前传入的这个节点将本节点进行比较
        if(binary.data<this.data) {
            //如果left是null那么放在左边,否则就应该递归 放该左节点的子节点
            if(left==null) {
                left=binary;    
            }else {
                left.add(binary);
            }
            
        }else {
            //同上
            if(right==null) {
                right=binary;    
            }else {
                right.add(binary);
            }
        }
    }
    
    public void travel() {
        //中序遍历就是先左子树 在根节点 在右子树
        if(left!=null) {
            left.travel();
        }
        System.out.println(data);
        if(right!=null) {
            right.travel();
        }
        
    }
    //12 9 5 8 11 20 进行排序
    public static void main(String[] args) {
        Binary binary=new Binary(12);
        binary.add(new Binary(9));
        binary.add(new Binary(5));
        binary.add(new Binary(8));
        binary.add(new Binary(11));
        binary.add(new Binary(20));
        binary.travel();
    }

}

 

 

转载于:https://www.cnblogs.com/lanSeGeDiao/p/9142163.html

相关文章:

  • 【Touchinput 】指定输入方法类型(11)
  • iOS中父类readonly属性修改
  • μCOS-II系统之事件(event)的使用规则及MUTEX实例
  • 之所以一无所成,并不是我们不够努力
  • [转]Ubuntu16 压缩解压文件命令
  • 数组全部整理
  • corosync+pacemaker配置高可用集群(需要额外安装crm工具)
  • Vmvare 虚拟机固定IP
  • 用Linux shell 计算两个时间差
  • Git 打补丁流程
  • Vagrant 基础全面解析
  • Elasticsearch重启前禁止分片移动的方法
  • Redis从入门到精通:初级篇(转)
  • 2017 Node.js 开发框架比较
  • systemd-journald日志持久化的操作方法
  • 03Go 类型总结
  • mongo索引构建
  • underscore源码剖析之整体架构
  • vue-loader 源码解析系列之 selector
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 给github项目添加CI badge
  • 微信小程序实战练习(仿五洲到家微信版)
  • 学习ES6 变量的解构赋值
  • 一些css基础学习笔记
  • ​queue --- 一个同步的队列类​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $.ajax()方法详解
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (3)STL算法之搜索
  • (BFS)hdoj2377-Bus Pass
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (LeetCode 49)Anagrams
  • (第27天)Oracle 数据泵转换分区表
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .jks文件(JAVA KeyStore)
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • ::前边啥也没有
  • @Mapper作用
  • [2]十道算法题【Java实现】
  • [C++] 统计程序耗时
  • [C++]priority_queue的介绍及模拟实现
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [Grafana]ES数据源Alert告警发送
  • [JS]Math.random()随机数的二三事
  • [leveldb] 2.open操作介绍
  • [luogu4162 SCOI2009] 最长距离(最短路)
  • [NCTF2019]True XML cookbook