首先,是关于二叉树的定义,我在这阐述一下,避免还有些朋友不知道java
二叉树是N个结点的有限集合,该集合或者为空集,或者由一个根节点跟两棵互不相交的、分别称为根节点的左子树或者右子树的二叉树组成,node
二叉树有如下几个特色数组
1:每一个结点最多有两个子树数据结构
2:左子树跟右子树是有序的函数
3:及时树中某个结点只有一棵子树,也要区分是左子树仍是右子树测试
二叉树有如下几个形态:ui
1:空二叉树this
2:只有一个根结点spa
3:根结点只有左子树debug
4:根结点只有右子树
5:根结点既有左子树,又有右子树
------------------------------------我是分割线----------------------------------
由于二叉树的每一个结点最多有两个孩子,因此咱们为它设计一个数据域跟两个指针域,两个指针域分别表示左结点跟右节点,下面是结构示意图
public class BinaryTree { //根结点,默认为null private Node root = null; public Node getRoot() { return root; } //经过内部类,构建结点 private class Node{ //左节点 private Node left; //数据域 private int data; //右节点 private Node right; public Node(int data) { this.data = data; } public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } } /** * 建立人:贺小五 * 建立时间:2017-09-16 00:54:52 * 描述: * 构建二叉树 * Node 为结点, * data 为数据 */ private void buildBiTree(Node node,int data){ //若是根结点是空,那么设置根结点,而且设置数据域 if(root == null){ root = new Node(data); }else{ /** * 根结点不为空,那么判断数据是否小于当前结点的数据 */ if(data<node.getData()){ //若是小于,判断当前结点是否有左叶子结点 if(node.getLeft()==null){ //左叶子结点为空,设置左叶子结点,而且设置数据 node.setLeft(new Node(data)); }else{ //左叶子结点不为空,递归调用构建二叉树的函数 buildBiTree(node.getLeft(),data); } }else{ //若是大于或等于,判断当前结点是否存在右叶子结点 if(node.getRight()==null){ //右叶子结点为空,设置右叶子结点,而且设置数据域 node.setRight(new Node(data)); }else{ //右叶子几点不为空,递归调用构建二叉树的函数 buildBiTree(node.getRight(),data); } } } } /** * 建立人:贺小五 * 建立时间:2017-09-16 01:01:30 * 描述: * 建立二叉树函数 * int[] 是个int类型的数组 * 经过循环调用,往二叉树插入数据 */ public static BinaryTree createBiTree(int[] datas){ BinaryTree binaryTree = new BinaryTree(); for (int data : datas) { binaryTree.buildBiTree(binaryTree.getRoot(),data); } return binaryTree; } }
以上就是构建一个普通二叉树的代码,根结点的左叶子结点会小于根结点,右叶子结点反之,
而后咱们上一段测试代码,往该树插入数据,
public static void main(String[] args) { int[] datas = {72,37,29,55,51,80}; BinaryTree biTree = BinaryTree.createBiTree(datas); }
以上就是构建一个二叉树的代码,很简单,下篇分享一下二叉树的遍历
到这,文章就结束了!
以上,均为本人我的理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流
欢迎转载,请注明出处跟做者,谢谢!