104.二叉树的最大深度
递归:
public class Solution {
public int MaxDepth(TreeNode root) {
if(root==null)
{
return 0;
}
return 1+Math.Max(MaxDepth(root.left),MaxDepth(root.right));
}
}
如果遇到当前节点为空就返回0,然后分别去递归节点的左右两个子树,哪个大取哪个,最后加上根节点的一个深度返回即可。
111.二叉树的最小深度
public class Solution {
public int MinDepth(TreeNode root) {
if(root==null)
{
return 0;
}
if(root.left==null&&root.right==null)
{
return 1;
}
if(root.left!=null&&root.right!=null)
{
return Math.Min(MinDepth(root.left),MinDepth(root.right))+1;
}
if(root.left!=null)
{
return MinDepth(root.left)+1;
}
if(root.right!=null)
{
return MinDepth(root.right)+1;
}
return 1;
}
}
如果根节点为空,直接返回零,如果根的左右两个子树为空,就返回1,左右节点都非空,那就取左右节点递归后最小的那个值加1。左节点不为空那就递归左节点然后加1返回,同理右节点非空的时候。最后都不中就返回1。
222.完全二叉树的节点个数
public class Solution {
public int CountNodes(TreeNode root) {
var q=new Queue<TreeNode>();
var sum=0;
if(root==null)
{
return 0;
}
q.Enqueue(root);
while(q.Count!=0)
{
var size=q.Count;
sum+=q.Count;
while(size!=0)
{
size--;
var cur=q.Dequeue();
if(cur.left!=null)
{
q.Enqueue(cur.left);
}
if(cur.right!=null)
{
q.Enqueue(cur.right);
}
}
}
return sum;
}
}
直接用层序遍历的流程操作即可,只是在求Size的时候每次进行一个Sum+=Size的累加最终将Sum返回出去即可。