二叉树的最大深度(递归)

1. 题目描述:给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

2. 思路分析:

① 分析这道题目可以知道是对于树的遍历,常用的方法有深度优先搜索和广度优先搜索,对于求解这道题目来说可以使用深度优先搜索也可以使用广度优先搜索来求解出二叉树的高度

② 下面使用的是深度优先搜索来进行解决,要求解出树的高度,从根节点开始往下求解,遍历左子树和右子树,而左子树和右子树又可以作为当前子树的根然后继续遍历所以这个是一个递归的过程,递归下去那么最终会到达叶子节点,它的左右子树都是空的,所以返回0,所以在当前节点加上1就是当前节点的高度,然后层层返回继续递归其他的子树,最终返回到根节点那么我们就可以把整棵树的高度给计算出来了,而且使用递归的方式来进行解决的话代码量非常小

3. 下面是随便构造出来的一棵二叉树,具体的代码如下:

//https://mp.weixin.qq.com/s/Ld_pjygabfOC7KrUs-jv_g
public class Main {
	static int max = 0;
	public static void main(String[] args) {
		//创建一颗二叉树
		TreeNode<Integer> root = new TreeNode<Integer>(3);
		TreeNode<Integer> l = new TreeNode<Integer>(9);
		TreeNode<Integer> r = new TreeNode<Integer>(20);
		TreeNode<Integer> rl = new TreeNode<Integer>(15);
		TreeNode<Integer> rr = new TreeNode<Integer>(7);
		TreeNode<Integer> rrl = new TreeNode<Integer>(4);
		root.left = l;
		root.right = r;
		r.left = rl;
		r.right = rr;
		rr.left = rrl;
		max = dfs(root);
		System.out.println(max);
	}
	
	private static int dfs(TreeNode<Integer> node) {
		//递归调用
		if(node == null) return 0;
		int leftheight = dfs(node.left);
		int rightheight = dfs(node.right);
		return Math.max(leftheight, rightheight) + 1;
	}

	private static class TreeNode<T>{
		@SuppressWarnings("unused")
		T value;
		TreeNode<T> left;
		TreeNode<T> right;
		public TreeNode(T value) {
			super();
			this.value = value;
		}
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值