【Java】 大话数据结构(9) 树

二叉树的性质

性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。

性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。

性质3:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

性质4:具有n个节点的完全二叉树的深度为[log2n]+1。([ ]代表向下取整)

性质5:如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1<=i<=n)有

    1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2]

    2.如果2i>n那么节点i没有左孩子(叶子结点),否则其左孩子为2i

    3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1

二叉链表的定义代码

扫描二维码关注公众号,回复: 1757075 查看本文章
public class BiTree<E> {
	
	private class BiTNode{
		E data;
		BiTNode lchild,rchild;		
		public BiTNode(E data,BiTNode l,BiTNode r) {
			this.data=data;
			this.lchild=l;
			this.rchild=r;
		}
	}
	
	private BiTNode root;

	public BiTree() {
		//root=new BiTNode(null, null, null);
		root=null;
	}

        ……
}

  

二叉树的遍历

	/*
	 * 前序遍历
	 */
	public void preOrder() {
		preOrderTraverse(root);
	}	
	private void preOrderTraverse(BiTNode node) {
		if(node==null)
			return;
		System.out.println(node.data);
		PreOrderTraverse(node.lchild);
		PreOrderTraverse(node.rchild);
	}
	
	/*
	 * 中序遍历
	 */
	public void inOrder() {
		inOrderTraverse(root);
	}	
	private void inOrderTraverse(BiTNode node) {
		if(node==null)
			return;
		inOrderTraverse(node.lchild);
		System.out.println(node.data);		
		inOrderTraverse(node.rchild);
	}
	
	/*
	 * 后序遍历
	 */
	public void postOrder() {
		inOrderTraverse(root);
	}	
	private void postOrderTraverse(BiTNode node) {
		if(node==null)
			return;
		postOrderTraverse(node.lchild);				
		postOrderTraverse(node.rchild);
		System.out.println(node.data);
	}

  

猜你喜欢

转载自www.cnblogs.com/yongh/p/9225382.html