104. 二叉树的最大深度

递归:

/**
 * 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 maxDepth(TreeNode* root) {if(root == nullptr) return 0;return max(maxDepth(root->left),maxDepth(root->right))+1;
    }
};

迭代:

广度优先搜索

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     int maxDepth(TreeNode* root) {
15         int result = 0;
16         if(root == nullptr) return result;
17         queue<TreeNode*> que;
18         que.push(root);
19         while(!que.empty()){
20             int count = que.size();
21             result++;
22             for(int i = 0; i < count; i++){
23                 TreeNode* node = que.front();
24                 que.pop();
25                 if(node->left != nullptr)   que.push(node->left);
26                 if(node->right != nullptr)  que.push(node->right);
27             }
28         }
29         return result;
30     }
31 };

111. 二叉树的最小深度

广度优先搜索

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     int minDepth(TreeNode* root) {
15         int result = 0;
16         if(root == nullptr) return 0;
17         queue<TreeNode*> que;
18         que.push(root);
19         while(!que.empty()){
20             int count = que.size();
21             result++;
22             for(int i = 0; i < count; i++){
23                 TreeNode* node = que.front();
24                 que.pop();
25                 if(node->left == nullptr && node->right == nullptr)
26                     return result;
27                 if(node->left != nullptr)   que.push(node->left);
28                 if(node->right != nullptr)  que.push(node->right);
29             }
30         }
31         return result;
32     }
33 };

222. 完全二叉树的节点个数

还是广度优先

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10  * };
11  */
12 class Solution {
13 public:
14     int countNodes(TreeNode* root) {
15         int result = 0;
16         if(root == nullptr) return result;
17         queue<TreeNode*> que;
18         que.push(root);
19         while(!que.empty()){
20             TreeNode* node = que.front();
21             que.pop();
22             result++;
23             if(node->left != nullptr) que.push(node->left);
24             if(node->right != nullptr)    que.push(node->right);
25         }
26         return result;
27     }
28 };