数据存储在存储器中一般按顺序结构,链接存储,散列存储,索引存储这四种存储方式存储,本篇文章只展示顺序存储的树格式,并遍历该种格式的树。
递归思想:递归思想最简单的理解就是自己调用自己,直到不满足条件才跳出递归,所以判断条件和自身调用时是递归两大不可缺少的东西。
顺序存储的二叉树特点:采取顺序存储的二叉树必须是完全二叉树,因为一般按照按行存储,所以需要为完全二叉树。
案例: 假设有这样的一颗棵树(如下)。
定义一个按行存储的数组(8-4-11-1-6-9-16),代码如下;
public int[] getTree(){//得到数组树的方法
int[] data={8,4,11,1,6,9,16};
return data;
}
前、中、后序遍历
只需改变根节点输出位置就可以实现前、中、后序遍历
public void ScanTree(int i){//遍历方法
if(arrayTree2==null && arrayTree2.length==0 ){
System.out.print("数组为空");
return;
}
System.out.println(arrayTree2[i]);//根节点
if((i*2+1)<arrayTree2.length){//左节点
ScanTree(i*2+1);
}
if((i*2+2)<arrayTree2.length){//右节点
ScanTree(i*2+2);
}
}
总代码:
public class TreeNode
{
public static void main(String args[]){//主函数
Tree arrayTree1= new Tree();
arrayTree1.ScanTree(0);
}
}
class Tree
{
int[] arrayTree2;//全局变量存储树
public Tree(){
arrayTree2= this.getTree();
}//无参数构造方法
public int[] getTree(){//得到数组树的方法
int[] data={8,4,11,1,6,9,16};
return data;
}
public void ScanTree(int i){//遍历方法
if(arrayTree2==null && arrayTree2.length==0 ){
System.out.print("数组为空");
return;
}
System.out.println(arrayTree2[i]);//根节点
if((i*2+1)<arrayTree2.length){//左节点
ScanTree(i*2+1);
}
if((i*2+2)<arrayTree2.length){//右节点
ScanTree(i*2+2);
}
}
}
该树的递归调用逻辑:
左根右情况
第一次8,满足条件向下
第二次4,满足条件向下
第三次1,不满足条件,无法向下
第四次输出1
第五次1,不满足条件,返回4层
第六次输出4
第七次6,不满足条件,无法向下
第八次输出6
第九次6,不满足条件,返回8层
第十次输出8
第十一次11,满足条件向下
第十二次9,不满足条件,无法向下
第十三次输出9
第十四次9,不满足条件,返回11层
第十五次输出11
第十六次16,不满足条件,无法向下
第十七次输出16
第十八次16,不满足条件,结束。