- 求二叉树结点的个数:利用队列,每次从队列中取结点,就让size++;
1.利用层次遍历
int getSize1(TreeNode root){
int size = 0;
if(root == null)
return 0;
Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode cur = queue.peek();
if(cur.left != null)
queue.offer(cur.left);
if(cur.right != null)
queue.offer(cur.right);
queue.poll();
size++;
}
return size;
}
2.利用子问题求解
int getSize2(TreeNode root){
if(root == null)
return 0;
return getSize2(root.left)+getSize2(root.right)+1;
}
- 求二叉树叶子结点的个数:同样是利用队列,但是增加了限制条件,当出队结点无左右孩子时,才会让size++。
1.利用层次遍历
int getLeafSize1(TreeNode root){
int size = 0;
if(root == null)
return 0;
Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode cur = queue.peek();
if(cur.left != null)
queue.offer(cur.left);
if(cur.right != null)
queue.offer(cur.right);
if(cur.left == null && cur.right == null)
size++;
queue.poll();
}
return size;
}
2.利用子问题求解
int getLeafSize2(TreeNode root){
if(root == null)
return 0;
if(root.left == null && root.right == null)
return 1;
return getLeafSize2(root.left)+getLeafSize2(root.right);
}