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 二叉树的最小深度

二叉树的最小高度,最大高度(深度)和宽度