table

两个表,采用递归关系,T1 存储所有家庭成员信息,T2存储成员关系,使用向上追溯的原则(这个原则是重点)

T1:
id int 自增
name varchar
sex 
生日
瘁日
备注
生平

T2
id int 自增
T1_id T1 里面的ID
父ID T1 里面的对应的父亲的ID
母ID T1 里面的对应的母亲的ID
夫ID T1 里面的对应的夫的ID
妻ID T1 里面的对应的妻的ID

查询方式:
1、一个家庭,可以使用T2,根据 父id 或者母ID 直接查询出来
2、多代查询,采用递归,也很容易查询出来

 

 

先看看多叉树的表示吧。

一. 多叉树的表示:

    由于要表示多个孩子,不能像二叉树那样一个leftchild,一个rightchild。当然你也可以选择采用孩子兄弟表示法来将多叉树转化成二叉树。但java提供了链表功能,能够允许设置不定数目的孩子,极大方便了多叉树的表示和实现。下面就是多叉树采用链表来表示孩子的表示方法:

  1. class treenode  
  2. {  
  3.     String data;  
  4.     treenode parent;  
  5.     LinkedList<treenode> childlist;  
  6.       
  7.     treenode()  
  8.     {  
  9.         data = null;  
  10.         childlist = new LinkedList();  
  11.         parent = null;  
  12.     }  
  13. }  

二. 多叉树的显示:

    多叉树的显示是树的比较重要的一个方面,要以合理的方式进行展现出来,一般均采用深度遍历来显示。

   

  1. private static void displaytree(treenode f, int level) {       //递归显示树   
  2.             
  3.           String preStr = "";  
  4.           for(int i=0; i<level; i++) {  
  5.            preStr += "    ";  
  6.           }  
  7.       
  8.           for(int i=0; i<f.childlist.size(); i++) {  
  9.               treenode t = f.childlist.get(i);  
  10.               System.out.println(preStr + "-"+t.data);  
  11.              
  12.            if(! t.childlist.isEmpty()) {  
  13.                displaytree(t, level + 1);  
  14.            }  
  15.           }  
  16.      }  

   注意到,改程序用到了递归来深度遍历,打印上采用了缩进的方式来显示父子关系。要注意到的是,为了让该程序能打印出总的根,在树的生成时,第一个节点设置为空,其孩子节点指向你的原来的根。这样,打印出来才是完整的。

三. 多叉树的生成:

    多叉树的生成是树的应用的核心。多叉树的目的就是用来表示可能拥有多孩子的树状结构。

    该实现方法主要基于两个方面:

    1) java对象赋值是reference关系,改变的是同一棵树;

    2) current指针总是指向要进行分析的节点,以便树的生长。

    大体算法如下:

    whole_root = root;

    current = root;

    while(list != null)

    {

        temp = list.pop();

        current.childlist.add(temp);

        current = temp;

        // your program

    }

    这样就能够生成一棵以whole_root为根的树,采用displaytree()就可以打印出来了。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值