给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3
。
思路
这题和LeetCode——111 二叉树的最小深度(JAVA)思路一致,就是DFS到叶子结点之后,数arrayList里元素的个数。
但是暂时没想到什么好的剪枝方法,时间空间开销较大。
代码
public class Solution {
public static class TreeNode {//为了方便本地调试调用内部类,我写了静态的
//实际提交时可以不写TreeNode类
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
int maxDeep = 0;
ArrayList<Integer> arrayList = new ArrayList<Integer>();
public void dfs(TreeNode root) {
arrayList.add(root.val);
if(root.left==null&&root.right==null) {
if(arrayList.size()>maxDeep) maxDeep = arrayList.size();
}
if(root.left!=null) {
dfs(root.left);
arrayList.remove(arrayList.size()-1);
}
if(root.right!=null) {
dfs(root.right);
arrayList.remove(arrayList.size()-1);
}
}
public int maxDepth(TreeNode root) {
if(root==null) {
return 0;
}
else {
dfs(root);
return maxDeep;
}
}
}