定义二叉树节点
public class TreeNode{
int val;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val){
this.val = val;
}
}
求二叉树的深度
使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+1
public int maxDepth(TreeNode root){
if(root==null)
return 0;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1+Math.max(leftDepth,rightDepth);
}
求二叉树的宽度
public int maxWidth(TreeNode root){
if(root==null){
return 0;
}
int width = 1;
Deque<TreeNode> deque = new ArrayDeque<>();
deque.add(root);
while(true){
int len = deque.size();//求当前层节点的个数
if(len == 0)
break;
while(len>0){ //当前层节点全部出列,子节点入列
TreeNode node = deque.poll();
len--;
if(node.left!=null){
deque.add(node.left);
}
if(node.right!=null){
deque.add(node.right);
}
}
width = Math.max(width,deque.size());
}
return width;
}