MaxDepth
求二叉树的最大深度(递归求 左子树、右子树,两者的最大值即为该树的最大深度)
public int maxDepth(TreeNode root) {
if(root==null){
return 0;
}
return maxDepthRecursion(root, 1);
}
public int maxDepthRecursion(TreeNode node,int depth){
int leftDepth = depth;
int rightDepth = depth;
if(node.left!=null){
leftDepth = maxDepthRecursion(node.left, leftDepth+1);
}
if(node.right!=null){
rightDepth = maxDepthRecursion(node.right, rightDepth+1);
}
return Math.max(leftDepth, rightDepth);
}
MinDepth
最小深度就需要考虑的比较多
(1)root==null return 0
(2)只有根节点
(3)只有左子树或只有右子树
(4)一般情况
本来想采用求左右子树的最小值的方法,但是不适用与第(3)中情况,因为得到的最小值为1.是错误的。所以采用一般方法,求出根节点到叶子节点的所有路径,得到其中最小路径即为树的最小深度。
public int minDepth(TreeNode root) {
if(root==null){
return 0;
}
List<String> list = new ArrayList<String>();
getAllPath(root, list, "");
//将list中path按逗号查分
String pathStr = list.get(0).trim();
String[] pathArry = pathStr.split(",");
int minDepth = pathArry.length;
for(String path:list){
pathArry = path.split(",");
if(pathArry.length<minDepth){
minDepth = pathArry.length;
}
}
return minDepth;
}
public void getAllPath(TreeNode node,List<String> list,String path){
path+=node.val+",";
if(node.left==null&&node.right==null){
list.add(path);
}
if(node.left!=null){
getAllPath(node.left, list, path);
}
if(node.right!=null){
getAllPath(node.right, list, path);
}
}