104. 二叉树的最大深度
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2
思路:
我们可以定义一个count计数器来记录最大深度,通过二叉树的前序遍历递归回溯二叉树深度,保留最大深度即可。
递归三部曲:
第一部:确定函数返回值和参数
int maxDepth(TreeNode* root)
第二部:确定终止条件
if(root==NULL) return count;
第三部:写出一次递归的逻辑
count++;
maxDepth(root->left);
maxDepth(root->right);
my_max = max(my_max,count);
count--;
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int count = 0;
int my_max = INT_MIN;
int maxDepth(TreeNode* root) {
if(root==NULL) return count;
count++;
maxDepth(root->left);
maxDepth(root->right);
my_max = max(my_max,count);
count--;
return my_max;
}
};
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6] 输出:5
思路:
我们可以定义一个count计数器,来记录二叉树最小的深度,采用递归回溯的方法,在遍历二叉树的过程中,记录最小的二叉树深度即可。
递归三部曲:
第一部:确定函数的返回值和参数
int minDepth(TreeNode* root)
第二部:确定递归终止条件
if(root==NULL) return count;
第三部:写出一次递归的逻辑
count++;
int le = minDepth(root->left);
int ri = minDepth(root->right);
if(root->left==NULL&&root->right==NULL)
my_min = min(my_min,count);
count--;
代码:
**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int count = 0;
int my_min = INT_MAX;
int minDepth(TreeNode* root) {
if(root==NULL) return count;
count++;
int le = minDepth(root->left);
int ri = minDepth(root->right);
if(root->left==NULL&&root->right==NULL)
my_min = min(my_min,count);
count--;
return my_min;
}
};
222. 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
层,则该层包含 1~ 2h
个节点。
示例 1:
输入:root = [1,2,3,4,5,6] 输出:6
示例 2:
输入:root = [] 输出:0
示例 3:
输入:root = [1] 输出:1
思路:
本题就是求完全二叉树的节点个数,可以用二叉树的层序遍历,也可以用二叉树的递归解决。
下面用递归讲解一下。
我们可以定义一个计数器count,用来记录结点个数。用二叉树的前序遍历遍历到结点就进行加加。
递归三部曲
第一部:确定函数返回值和参数
int countNodes(TreeNode* root)
第二部:确定递归的终止条件
if(root==NULL) return count;
第三部:写出一次递归的逻辑
count++;
countNodes(root->left);
countNodes(root->right);
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int count = 0;
int countNodes(TreeNode* root) {
if(root==NULL) return count;
count++;
countNodes(root->left);
countNodes(root->right);
return count;
}
};
还有很多瑕疵,还需继续坚持!