题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
解题思路
这道题可以利用递归的思想:
1、只有一个根节点,深度为1;
2、如果根节点只有一颗子树,深度为子树+1。
3、如果根节点有两颗子树,深度就为两颗子树深度大的+1;
参考代码
递归结束的条件就是当树为空的时候。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public int TreeDepth(TreeNode root) {
if(root!=null)
{
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return right>left ? right+1 : left+1;
}
return 0;
}
}
7/29二刷
最大深度,一定是左子树深度或者右子树深度其中最大的+1,我们就直接写一个递归,让这个递归去寻找,我们不关心过程,只关系结果,终止条件就是null的时候,返回0。
第二种方法bfs,类似层次遍历,我们需要在遍历的过程中,维护一下每一层的关系,保证一层结束后,深度+1.
参考代码
/**
* @author 超厉害的我啊
* @date 2020/7/29 00:11:16
* 二叉树的最大深度
* 3
* / \
* 9 20
* / \
* 15 7
* size就是1、2、2,在这里好好理解一下。
*
*/
public class d7_28 {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
//递归
public int maxDepth(TreeNode root) {
if(root==null)
return 0;
int left=maxDepth(root.left);
int right=maxDepth(root.right);
return Math.max(left,right)+1;
}
//bfs
public int maxDepth2(TreeNode root){
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
int sum=0;
while (!queue.isEmpty())
{
int size=queue.size();
for (int i = 0; i < size; i++) {//这里不管是for还是while(size--)都是为了控制同一层
TreeNode node=queue.poll();
if(node.left!=null)
queue.offer(node.left);
if(node.right!=null)
queue.offer(node.right);
}
sum++;
}
return sum;
}
}