参考文档:

avl树:http://lib.csdn.net/article/datastructure/9204

avl树:http://blog.csdn.net/javazejian/article/details/53892797

红黑树:http://daoluan.net/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AE%97%E6%B3%95/2013/09/25/rbtree-is-not-difficult.html

trie树:https://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html

b,b+,b* 树 :https://www.cnblogs.com/wjoyxt/p/5501706.html

b,b+ 树 & linux磁盘存储 :https://www.cnblogs.com/vincently/p/4526560.html

b,b+树 & mysql索引 & 索引的结构优化:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

 

树:

树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件:
     (1)有且仅有一个特定的称为根(Root)的结点;
     (2)当n>1时,其余结点可以划分为m(m>0)个互不相交的有限集T1、T2 、…、Tm,每个集Ti(1≤i≤m)均为树,且称为树T的子树(SubTree)。
    特别地,不含任何结点(即n=0)的树,称为空树。
如下就是一棵树的结构:

数据结构(一)二叉树 & avl树 & 红黑树 & B-树 & B+树 & B*树 & R树

两种树:

  • 有序树:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树
  • 无序树:若将树中每个结点的各子树看成是从左到右无次序的(即可以互换),则称该树为无序树

     

多叉树的广度优先遍历与深度优先遍历

举个栗子:

多叉树 数据结构(一)二叉树 & avl树 & 红黑树 & B-树 & B+树 & B*树 & R树

 

广度优先遍历:a b c d e f g h i

深度优先遍历:a b d e i c f g h (相当于二叉树的先序遍历)

实现:

public class MultiwayTree {
    private static MultiwayNode root;

public MultiwayTree(){
    //        a
    //    b       c
    // d     e  f  g  h
    //     i
    MultiwayNode h=new MultiwayNode("h");
    MultiwayNode i=new MultiwayNode("i");
    MultiwayNode g=new MultiwayNode("g");
    MultiwayNode f=new MultiwayNode("f");
    MultiwayNode d = new MultiwayNode("d");
    MultiwayNode e = new MultiwayNode("e",i);
    MultiwayNode b = new MultiwayNode("b", d, e);
    MultiwayNode c = new MultiwayNode("c", f, g,h);
    root = new MultiwayNode("a", b, c);
}
//深度优先遍历
static void depthFirstSearch(MultiwayNode node){
    if(node==null){
        return;
    }
    List<MultiwayNode> children=node.children;
    if(children==null){
        return;
    } 
    System.out.print(node.value+" ");
    for(MultiwayNode no:children){
        depthFirstSearch(no);
    }

}
//广度优先遍历
static void breadthFirstSearch(){
    List<MultiwayNode> list=new ArrayList<MultiwayNode>();
    list.add(root);
    breadthFirstSearch(list);
}

//广度优先遍历
static void breadthFirstSearch(List<MultiwayNode> nodes){
    List<MultiwayNode> level=new ArrayList<MultiwayNode>();
    for(MultiwayNode node:nodes){
        System.out.print(node.value+" ");
        List<MultiwayNode> children=node.children;
        level.addAll(children);
        children.clear();
    }
    if(level.size()>0){
        breadthFirstSearch(level);
    }
}
    public static void main(String[] args) {
        MultiwayTree head=new MultiwayTree();
        depthFirstSearch(head.root);
    }

}
class MultiwayNode{
    public String value;
    public List<MultiwayNode> children=null;
    public MultiwayNode(String value,MultiwayNode... nodes){
        this.value=value;
        children=new ArrayList<MultiwayNode>();
        for(MultiwayNode node:nodes){
            children.add(node);
        }
    }
}
View Code

相关文章: