树-树遍历-递归思想

数据存储在存储器中一般按顺序结构,链接存储,散列存储,索引存储这四种存储方式存储,本篇文章只展示顺序存储的树格式,并遍历该种格式的树。

递归思想:递归思想最简单的理解就是自己调用自己,直到不满足条件才跳出递归,所以判断条件和自身调用时是递归两大不可缺少的东西。

顺序存储的二叉树特点:采取顺序存储的二叉树必须是完全二叉树,因为一般按照按行存储,所以需要为完全二叉树。

案例: 假设有这样的一颗棵树(如下)。在这里插入图片描述
定义一个按行存储的数组(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,不满足条件,结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值