数据结构及算法基础--树(Tree)(一)基础详解

我们在前面介绍了很多典型的线性结构,如队列,堆栈,数组,她们至多只有一个尾节点。这是非常容易理解的。

下面我们要来介绍一个非线性结构,树(tree):

树不在是一对一的数据结构,而是一对多的非线性连接:

shixin tai shuai le

 

这里有几个规定:

  • 图中的结构就像一棵倒过来的树,最顶部的节点就是“根节点 (root 节点)
  • 每棵树至多只有一个根节点
  • 根节点生出多个孩子节点,每个孩子节点只有一个父节点,每个孩子节点又生出多个孩子
  • 父亲节点 (parent) 和孩子节点 (child) 是相对的
  • 没有孩子节点的节点成为叶子节点 (leaf)

树的相关术语:

shixinzhang

 

1)节点的度:

  一个节点直接含有的子树个数,上图中3的度为2,10的度为1;

2)树的度:

  一个树里面节点的度的最大值。例如上图的树的度为2;

3)节点的层次:

  从根节点开始算起,根节点算第一层,上图中3为第二层,13为第四层;

4)树的高度:

  从叶节点开始,从下往上增加;

5)树的深度:

  从根节点开始,从上往下增加;

 

上看给出的信息是非常非常重要的,一定要熟练掌握。

 

由上述描述,我们一般可以通过两种方式实现一棵简单的树:

1)数组实现。

package treeTest;

public class TreeNodebyArray<item> {
    private item mData;
    private int mParent;
    
    public TreeNodebyArray(item data,int parent){
        mData=data;
        mParent=parent;
    }
    
    public item getData(){
        return mData;
    }
    
    public int getMParent(){
        return mParent;
    }
    
    public void setData(item data){
        mData=data;
    }
    
    public void setParent(int parent){
        mParent=parent;
    }
    public static void main(String[] args){
                TreeNode[] arrayTree = new TreeNode[10];
        }
}
            

 

2)链表实现:

package treeTest;

public class TreeNodebyLinkList<item> {
    private item mData;
    private TreeNodebyLinkList parent;
    private TreeNodebyLinkList kid;
    
    public TreeNodebyLinkList(item data,TreeNodebyLinkList parent){
        mData=data;
        this.parent=parent;
    }
    
    public item getData() {
        return mData;
    }

    public void setData(item data) {
        mData = data;
    }

    public TreeNodebyLinkList getParent() {
        return parent;
    }

    public void setParent(TreeNodebyLinkList parent) {
        this.parent = parent;
    }

    public TreeNodebyLinkList getChild() {
        return kid;
    }

    public void setChild(TreeNodebyLinkList kid) {
        this.kid = kid;
    }

    public static void main(String[] args){
        LinkedList<LinkedTreeNode> linkedTree = new LinkedList<>();
    }
}

 

 

当然,根据不同的树的要求,我们需要在一定程度上更改树内部的结构,所以实现代码也会不同。上述代码知识考虑了一种情况。

posted @ 2017-10-08 04:10  霄十一郎  阅读(6913)  评论(0编辑  收藏  举报