c_cpp 二叉树的最小和最大深度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 二叉树的最小和最大深度相关的知识,希望对你有一定的参考价值。
// ===================================================================
// recursive version
int minimum_depth(TreeNode *root) {
if(!root) return 0;
if(!root->left && !root->right) return 1;
int minHL = minimum_depth(root->left), minHR = minimum_depth(root->right);
if(!root->left && root->right) return 1+minHR;
if(root->left && !root->right) return 1+minHL;
return 1 + min(minHR, minHL);
}
// ===================================================================
// iterative version, BFS
int minDepth(TreeNode *root) {
if(!root) return 0;
if(!root->left && !root->right) return 1;
queue<TreeNode*> q;
q.push(root);
int min_depth = 1, level1 = 1, level2 = 0;
while(!q.empty()) {
TreeNode *cur = q.front();
q.pop();
level1--;
// if(!cur) continue; // wrong!! cannot write like this. otherwise, POS1 cannot be executed.
if(cur) {
if(!cur->left && !cur->right) return min_depth;
q.push(cur->left);
q.push(cur->right);
level2 += 2;
}
if(level1 == 0) { // POS1
level1 = level2;
min_depth++;
level2 = 0;
}
}
return min_depth;
}
// ===================================================================
// better iterative version!
int minDepth(TreeNode *root) {
if(!root) return 0;
if(!root->left && !root->right) return 1;
queue<TreeNode*> q;
q.push(root);
int min_depth = 1, level1 = 1, level2 = 0;
while(!q.empty()) {
TreeNode *cur = q.front();
q.pop();
level1--;
if(!cur->left && !cur->right) return min_depth;
if(cur->left) { q.push(cur->left); level2++; }
if(cur->right) { q.push(cur->right); level2++; }
if(level1 == 0) { // POS1
level1 = level2;
min_depth++;
level2 = 0;
}
}
return min_depth;
}
// ===================================================================
int maximum_depth(TreeNode* root)
{
if(root == NULL) return 0;
int lh = maximum_depth(root->left);
int rh = maximum_depth(root->right);
return (lh > rh) ? (lh + 1) : (rh + 1);
}
以上是关于c_cpp 二叉树的最小和最大深度的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp [tree] [dfs] [bfs]二叉树的最小深度
二叉树的最大和最小深度
c_cpp 104.二叉树的最大深度 - 难度易 - 2018.9.10
代码随想录算法训练营第16天 | ● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数
[LeetCode] #111 二叉树的最小深度
二叉树的最小高度,最大高度(深度)和宽度