二叉树的性质
性质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); }