数据结构—树(Tree)的入门原理以及Java实现案例

本文介绍了三种树节点表示法:父节点索引法、子节点链表示法和父子兄弟表示法,强调了父子兄弟表示法的高效性。作者还分享了Java开发者的学习资源,包括学习资料和面试技巧,建议制定明确的学习路线以提高学习效率。
摘要由CSDN通过智能技术生成

上图的树,使用最简单的父节点表示法可以表示为:

index(数组索引) data(数据域) parent(父节点索引)
0 r -1
1 a 0
2 b 0
3 c 0
4 d 1
5 e 1
6 f 2
7 g 3
8 h 3
9 i 4
10 j 4
11 k 4

树节点的设计可以是:

/**

  • 树节点的设计

  • @param E类型

*/

private static class TreeNode {

//数据域

E e;

//父节点的索引

int parent;

public TreeNode(E e, int parent) {

this.e = e;

this.parent = parent;

}

}

这样的存储结构,我们可以根据结点的parent索引很容易找到它的双亲结点,所用的时间复杂度为O(1),直到parent为-1时,表示找到了树结点的根。但是如果要知道孩子节点是什么,那就需要遍历整个数组才行。

2.2 父子节点链表示法


为了能够直观的找到一个节点的孩子节点。在原节点中添加一个子节点链表,原节点保存子节点链表的头索引,同时节点保存着父节点的索引。这需要一种新的孩子节点。

index(数组索引) data(数据域) parent(父节点索引) child(子节点链表头索引)
0 r -1 a->b->c->null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值