算法是编程的灵魂——Java中的森林、树、二叉树

1.树和森林

树是一种基本的数据结构。一棵树只有一个根结点。可以没有或有多个子结点。每个子结点以及子结点以下的结点又组成了一棵树,叫做子树。在一棵树结构中,只有父结点,没有子结点的结点叫做叶子结点

森林是多棵互不相交的树的集合。对树中的每个结点而言,其子树的集合就是森林。




2.二叉树
更多二叉树见
http://www.iteye.com/topic/561141

二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树,并且二叉树中的子树还有左右之分,它们的次序不能颠倒。







3.二叉树结点的表示


Class Node{

private Object data; //结点中存储的数据

private Node parent; //父结点的引用

private Node lChild; //左结点的引用

private Node rChild; //右结点的引用

}








4.二叉树的性质

1.在二叉树的第i层上至多有2^(i-1)个结点(i>=1)

2.深度为k的二叉树至多有(2^k)-1个结点(k>=1)

3.对任何一棵二叉树,如果其终端节点数为n0,度为2的结点数为n2,则n0=n2+1.

设n1为度为1的结点树,则总结点数n=n0+n1+n2

根据度与结点的对应关系有n=n1+2*n2+1(1表示一个根结点)

两式结合有n0=n2+1



4.具有n个结点的完全二叉树的深度是[]+1

完全二叉树形象的理解是它的上一层是满二叉树,而下一层要求右侧的孩子节点可以也只可以连续缺少,但是左侧不能缺少。性质4的证明如下:

假设深度为k,则该二叉树为满二叉树时结点最多为(2^k)-1,最少的情况是最后一层只有一个结点为2^(k-2)+1。则2^(k-2)+1<=n<=(2^k)-1,即<k<=+1,因为k是整数所以k=[]+1.







5.二叉排序树的建立和遍历

二叉排序树具有如下性质:1)左子树上所有结点的值均小于根结点的值2)右子树上所有结点的值均不小于根结点的值3)左右子树也分别是二叉排序树

建立二叉排序树的代码如下:


/**

* 将一个整型数组存储在一个查找二叉树中

* @param array 被存储的数组

* @return 查找二叉树的根节点

*/

public TreeNode arrayToTree(int[] array) {

TreeNode root = new TreeNode(array[0]);



for (int i = 1; i < array.length; i++) {

TreeNode node = new TreeNode(array[i]);

insertNode(node, root);

}



return root;

}



private void insertNode(TreeNode node, TreeNode root) {



if ((Integer) node.getObj() < (Integer) root.getObj()) {

if (root.getLchild() == null){

root.setLchild(node);

}

else

insertNode(node, root.getLchild());

} else {

if (root.getRchild() == null){

root.setRchild(node);

}

else

insertNode(node, root.getRchild());

}

}



遍历排序二叉树的代码如下:


/**

* 中序遍历二叉树

* @param root 二叉树的根节点

*/

public void traverseTree(TreeNode root) {

if (root != null) {

int data = (Integer) root.getObj();



traverseTree(root.getLchild());



System.out.println(data);



traverseTree(root.getRchild());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值