从二叉树的生成中了解递归

从二叉树的生成中了解递归

在学习递归之前呢,我们先了解一种用图表示函数调用的方式。
比如:

public class Test{
	public static void main(String args[]){
		function1();
		function2()
	}
	public static void function1(){}
	public static void function2(){}
}

用图表示的话就是:
在这里插入图片描述
这张图表示main()函数调用了funciton1()和funtion2()两个函数,并且调用顺序是从左到右。

好,有了图表示函数调用之后,说明递归就比较简单了。

什么是递归?简单的来说就是自己调用自己。我们用一个最简单的例子–二叉树的生成 来说明递归的过程。

//定义一个叫做Node的节点,作为一个数据结构
public class Node{
	public int data;	//节点上的数据
	public Node left;	//左节点
	public Node right;	//右节点
}
public class Test{
	public static void main(String args[]){
		Node root = creatTree(3);
	}

	/*  @param level:表示生成的二叉树有多少层
	    @return :返回的是二叉树的根节点
	*/
	public static Node creatTree(int level){
		Node root = new Node();		//创建一棵树的根节点
		creatNode(root,level);		//根据根节点和层数生成一棵树
		return root;			//将树的根节点返回
	}
	public static void creatNode(Node parent,int level){
		//递归终止条件
		if(level == 0) return;
		//每一层递归要做的事情
		parent.left = new Node();
		parent.right = new Node();
		level--;
		//递归
		creatNode(parent.left,level);
		creatNode(parent.right,level);
	}
}

这份代码比较规范,核心是creatNode()这个函数,只有这个函数中用到了递归,看起来这个函数比较美观,理解起来却让人头皮发麻,好,那我们用图来理解一下。

二叉树的递归函数调用过程上面的序号代表函数的执行顺序,自己想想为什么是这个顺序,这个过程我不能帮你代替,相信聪明的你一定想出来,静下心来,不要浮躁,好好想想。。

如果想明白了的话,接着往下。

然后我们来分析一下creatNode()这个函数
这个函数由三部分组成:

  1. 递归终止条件
if(level==0)return;
  1. 每一次递归要做的事情
parent.left = new Node();
parent.right = new Node();
level--;
  1. 递归
creatNode(parent.left,level);
creatNode(parent.right,level);

现在我们回过头来想想我们是怎么构造creatNode()这个函数的。
回想一下树的生成过程:对于每一个节点,都生成它的左节点和右节点,当生成3层之后就结束递归。
所以:
终止条件: level==0

每次递归要做的事情:
parent.left = new Node();//生成左节点
parent.right = new Node();//生成右节点
level --;

递归:
creatNode(root.left);
creatNode(root.right);

这是我第一次写博客,感觉很多东西想表达却表达不出,以后会有提高,希望对诸位有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值