二叉树


文章目录

  • 二叉树
  • 一、二叉树是什么?
  • 二叉树的性质
  • 二、二叉树简单JAVA代码实现
  • 1.Node(节点)
  • 2.MyTree(简单二叉树)
  • 总结



一、二叉树是什么?

二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。

java 中二叉树怎么实现 java二叉树代码_java

二叉树的性质

性质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();
	}
}

总结

节点作为构造二叉树的基本,需要深刻理解左节点和右节点的逻辑思路。