104.二叉树最大深度
最大深度的另一个含义是根节点的高度,通过后序遍历即可返回根节点高度
递归法:
1.返回值:根节点高度 传入参数:根节点
2.当遍历至空时,也就是叶子节点的子节点,返回值0,因为叶子节点的高度为1
3.左,返回其左子树的最大高度。
右,返回其右子树的最大高度。
中,返回其左右子树中较大值 + 1;
4.最终得到二叉树的最大深度
111.二叉树的最小深度
后序遍历 左右中
1.返回值:根节点高度 传入参数:根节点
2.当遍历至空时,也就是叶子节点的子节点,返回值0,因为叶子节点的高度为1
3.如果当前左子树不为空,右子树为空,返回其左子树的高度 + 1;
4.如果当前右子树不为空,左子树为空,返回其右子树的高度 + 1;
5.如果都为空,返回左右子树中较小值 + 1;
其中二叉数的最大深度和最小深度的区别在与中间节点的处理方式,因为求的是最大深度,因此其左右子树必然为空。而最小深度的话,需判断每一个节点是否是叶子结点。
222.完全二叉树的节点个数
三种方法:1.层序遍历 2.递归 3.完全二叉树的性质
1.利用队列控制每层弹出数量,在for循环中加入一个计数器,该计数器记录节点个数
2.递归至叶子节点,叶子节点依次向上返回,最终返回左子树+右子树+1,也就是当前节点个数
3.1判断该其左子树和右子树的高度是否相等,如果相等,则是满二叉树,直接 (2 << n) - 1
3.2如果不是,则继续向下判断,直至找到完全二叉树