zoukankan      html  css  js  c++  java
  • 数据结构之二叉树

    二叉树定义:
    	每个节点最多含有两个子树的树称为二叉树,通常子树被称作“左子树(left subtree)”和“右子树(right subtree)”,有左右之分,次序不能颠倒;
    
    二叉树分类:     
    	1.完全二叉树:对于一棵二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
        2.满二叉树:对于上述的完全二叉树,如果去掉其第d层的所有节点,那么剩下的部分就构成一个满二叉树(此时该满二叉树的深度为d-1);
    
    二叉树存储:
    	连续存储(以完全二叉树存储)
    		二叉树可以用数组或线性表来存储。如果一个节点的索引为i,它的子节点能在索引2i+1和2i+2找到,并且它的父节点能在floor((i-1)/2)找到(根节点索引为0)。
    
    Tree
    
    	链式存储
    
    /**
     * 二叉树链式存储的数据结构
     */
    public class BinNode {
        /*节点数据*/
        private Object data;
        /*左子节点引用*/
        private Node leftNode;
        /*右子节点引用*/
        private Node rightNode;
    
        public BinNode(Object data, Node leftNode, Node rightNode) {
            this.data = data;
            this.leftNode = leftNode;
            this.rightNode = rightNode;
        }
    }
    
    
    二叉树的访问: 树的遍历先序(DLR)、中序(LDR)、后序(LRD)。 Tree3 先序遍历: 1、访问根节点; 2、再先序访问左子树; 3、再先序访问右子树; 遍历结果为:1 2 4 8 5 3 6 7 中序遍历: 1、访问左子树; 2、访问根节点; 3、访问右子树; 遍历结果为:8 4 2 5 1 3 6 7 后序遍历: 1、访问右子树; 2、访问左子树; 3、访问根节点; 遍历结果为:8 4 5 2 6 7 3 1 已知先序和中序,或者已知中序和后序即可还原原始二叉树: 例如通过先序和中序求原始二叉树的思路如下: 1、先序先访问根节点,通过先序序列可以得出1为树的根; 2、中序先访问左子树,通过中序序列可以得出8 4 2 5 为根左子树的子孙,3 6 7 为根右子树的子孙; 3、左子树8 4 2 5这4个子孙中,子孙2在先序序列中最靠前,可以得出2为左子树的根; 4、以此类推。 将n叉树转换为二叉树: 将每个节点的左子节点指向他的第一个孩子节点,右子节点指向他的下一个兄弟节点。 Nary to binary tree conversion
  • 相关阅读:
    对象生成xml
    Memcache使用指南
    java实现AES加密解密
    Log4j常用的配置说明
    java利用dom4j对任意xml的解析
    一个不错的JDBC连接池教程
    jwt介绍
    model基础操作
    图书管理系统前端
    图书管理系统后端
  • 原文地址:https://www.cnblogs.com/zengxianxi/p/3623174.html
Copyright © 2011-2022 走看看