二叉树
二叉树:每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的性质:
性质1:在二叉树的第 i 层上至多有2i-1个结点。
性质2:深度为k的二叉树至多有2k-1个结点(k>=1)。
性质3:对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
java实现:
public class BinaryTreeDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
BinaryTree bt = new BinaryTree();
bt.addNode(10);
bt.addNode(15);
bt.addNode(2);
bt.addNode(5);
bt.addNode(8);
bt.addNode(17);
bt.print();
}
}
class BinaryTree{
private Node root;
public void addNode(Comparable data){
if (root == null) {
root = new Node(data);
}else{
root.add(data);
}
}
public void print(){
root.print();
}
class Node{
private Comparable data;
public Comparable getData() {
return data;
}
public void setData(Comparable data) {
this.data = data;
}
private Node left;
private Node right;
public Node(Comparable data){
this.data = data;
}
public void add(Comparable data){
if (this.data.compareTo(data)>0) {
if (this.left == null) {
this.left = new Node(data);
}else{
this.left.add(data);
}
}else{
if (this.right == null) {
this.right = new Node(data);
}else{
this.right.add(data);
}
}
}
public void print(){
if (this.left != null) {
this.left.print();
}
System.out.println(this.getData());
if (this.right != null) {
this.right.print();
}
}
}
}