1. 最大深度
采用分治算法的思想,将问题分为两个部分,再将每部分继续分成两个部分,一直到基值条件返回。这里即是将左子树和右子树的深度分别求出来比较,用大的那个深度加1即可。所以采用递归的思想。
package JianZhiOffer;
public class TreeDepth
{
public int TreeDepth(TreeNode root)
{
if(root==null)
return 0;
else
{
int left=TreeDepth(root.left );
int right=TreeDepth(root.right );
return 1+Math.max(left,right);
}
}
}
2 . 最大宽度
重点就是要用一个队列,实现节点从对头出队,并可以统计每一层的节点个数,当节点为0时,则退出while循环。
package JianZhiOffer;
import java.util.ArrayDeque;
import java.util.Queue;
public class TreeWidth
{
public int TreeWidth(TreeNode root)
{
if(root==null)
return 0;
Queue<TreeNode> queue=new ArrayDeque<TreeNode>();
queue.add(root);
int max=1;
while(true)
{
int len=queue.size();
if(len==0)
break;
while(len>0)
{
TreeNode node=queue.poll();
len--;
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
}
max=Math.max(max,queue.size());
}
return max;
}
}