本文共 2226 字,大约阅读时间需要 7 分钟。
本文纯自己的一些独到感受和理解,长期努力完善和总结~
————————————分割线————————————
数据结构是指互相之间存在着一种或多种关系的数据元素的集合。且数据结构和数据元素之间存在逻辑关系,数据在计算机上的存储方式和在数据上定义的运算,可以归纳为三个方面:数据的逻辑结构、数据的存储结构和数据的运算。
二叉树是有限个数据元素的集合,该集合或者为空、或者由一个称为根节点所携带的元素及两个不相交的,被分别成为左子树和右子树组成。当集合为空时,称二叉树为空二叉树。然而二叉树组成左右子树是有一定要求的。比如:
由图可以看出,该二叉树叶子结点在同一层且是满的,所以该图是一个满二叉树。
而又可以知道该集合数的大小关系:G>C>F>A>E>B>D。这里可以总结,如果结点(子节点)所拥有的值小于对于它的父节点的值,那么应该是它父节点的左子树,相反就是它的右子树。拿ABC三个值来说,因为B<A,所以B应该是A的左子树,相反C>A,C应该是A的右子树,那么定义根节点的要求又是什么呢?这个得看你数组或者集合中的值的第一个了,若没有进行别的处理的时候把第一个值当作根结点会方便很多~当然数值太小不便于建树噢!
————————————————————————————
下面附JAVA建二叉树的代码:
public static void insertTree(TreeNode tr, Integer value) { if(tr.getValue()==null) { tr.setValue(value); }//如果第一个结点没有值,将第一个数据放入该节点 else{ if( value<=tr.getValue()) { if( tr.getLeftNode()==null ) { tr.setLeftNode(new TreeNode());//如果左子树没有值,放入值 } tr=tr.getLeftNode();//否则放入左子树 insertTree(tr,value);//回调函数在进行判断 } else{ if( tr.getRightNode()==null ) { tr.setRightNode(new TreeNode()); } tr=tr.getRightNode(); insertTree(tr,value); } } }//插入算法 public static void search(Treenode tr,int data){ if(tr.getValue().intValue()==data){ System.out.println("找到了"+data); } else{ if(data < tr.getValue().intValue()){//判断左边 if(tr.getLeftNode()== null){//输出找不到 System.out.println("该树没有"); } else { search(tr.getLeftNode(),data); } } else if(data > tr.getValue().intValue()){ if(tr.getRightNode()== null) {//输出找不到 System.out.println("该树没有"); } else { search(tr.getRightNode(),data); } } } }//查找二叉树 public static Treenode searchRightmin(Treenode tr){//找删除树的左边最大的 if(tr.getRightNode() == null){ return tr; } else{ return searchRightmin(tr.getRightNode()); } } public static Treenode searchLeftmax(Treenode tr){//删除数右边最小的 if(tr.getLeftNode()== null){ return tr; } else{ return searchLeftmax(tr.getLeftNode()); } }
转载地址:http://tctrn.baihongyu.com/