二叉数的最小深度:
思路:和最大深度一样需要用到回溯递归的方法
代码大致内容
判断函数是否为空,如果是空return 0;
定义一个变量接收递归函数返回的值(左)
定义一个变量接收递归函数返回的值(右)
判断如果函数左边为null但是右边不是null表示没用到最终位置所以返回一个rightdepth+1;
同理右边就返回左边加1
如果满的就返回两个之中的最小值
看代码:
class Solution {
public:int getDepth(TreeNode* node) {if (node == NULL) return 0;int leftDepth = getDepth(node->left); // 左int rightDepth = getDepth(node->right); // 右// 中// 当一个左子树为空,右不为空,这时并不是最低点if (node->left == NULL && node->right != NULL) { return 1 + rightDepth;} // 当一个右子树为空,左不为空,这时并不是最低点if (node->left != NULL && node->right == NULL) { return 1 + leftDepth;}int result = 1 + min(leftDepth, rightDepth);return result;}int minDepth(TreeNode* root) {return getDepth(root);}
};
下题为节点数量统计:
很简单
思路:首先定义一个变量count = 0;
代码内容:首先判读是否为空,空则返回count
count = 递归左边
count =递归右边
最后return count + 1;
代码意义:所有递归除了为空,都会使count + 1,而两个递归可以遍历所有的节点
这样就可以计算出来所有的节点数量
看代码:
class Solution {
public:
int count = 0;
int countNodes(TreeNode* root)
{
if(root == nullptr)return count;;
count = countNodes(root -> left);
count = countNodes(root -> right);
return count + 1;
}
};