二叉树
文章目录
- 二叉树
- 一、二叉树是什么?
- 二叉树的性质
- 二、二叉树简单JAVA代码实现
- 1.Node(节点)
- 2.MyTree(简单二叉树)
- 总结
一、二叉树是什么?
二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
二叉树的性质
性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)
性质2:深度为k的二叉树至多有2k-1个结点(k>=1)
性质3:包含n个结点的二叉树的高度至少为(log2n)+1
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
二、二叉树简单JAVA代码实现
1.Node(节点)
代码如下(示例):
public class Node {
public int data;//数据
public Node leftNode;//左节点
public Node rightNode;//右节点
/**
* 添加节点
* @param t 新节点
*/
public void addNode(Node t){
if(t.data<this.data){//新增节点数据比此节点数据小时
if(leftNode == null)//此节点没有左节点时,就把此节点作为左节点
leftNode = t;
else//有左节点时,递归调用addNode()直到没有左节点为止
leftNode.addNode(t);
}else{//新增节点数据比此节点数据大时
if(rightNode == null)//此节点没有右节点时,就把此节点作为右节点
rightNode = t;
else//有右节点时,递归调用addNode()直到没有右节点为止
rightNode.addNode(t);
}
}
/**
* 中序遍历
* @param
*/
public void zhongxu(){
if(leftNode!=null) leftNode.zhongxu();
System.out.println(data);
if(rightNode!=null) rightNode.zhongxu();
}
}
中序遍历:左子树->根节点->右子树(左->根->右)
步骤:
第一步:访问该节点左子树
第二步:若该节点有左子树,则返回第一步,否则打印该节点
第三步:若该节点有右子树,则返回第一步,否则结束递归并返回上一节点
2.MyTree(简单二叉树)
代码如下(示例):
public class MyTree {
private Node root;//根节点
/**
* 添加数据
* @param x 传进来的数据添加到树中
*/
public void add(int x){
Node p = new Node();
p.data = x;
if(root == null)//没有根节点时,以新传进来的数据作为根节点
root = p;
else
root.addNode(p);
}
/**
* 排序
* @param
*/
public void sort(){
if(root == null) return;
root.zhongxu();
}
}
总结
节点作为构造二叉树的基本,需要深刻理解左节点和右节点的逻辑思路。