zoukankan      html  css  js  c++  java
  • LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree

    LeetCode:Minimum Depth of Binary Tree

    Given a binary tree, find its minimum depth.

    The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

    算法1:dfs递归的求解

     1 class Solution {
     2 public:
     3     int minDepth(TreeNode *root) {
     4         // IMPORTANT: Please reset any member data you declared, as
     5         // the same Solution instance will be reused for each test case.
     6         if(root == NULL)return 0;
     7         int res = INT_MAX;
     8         dfs(root, 1, res);
     9         return res;
    10     }
    11     void dfs(TreeNode *root, int depth, int &res)
    12     {
    13         if(root->left == NULL && root->right == NULL && res > depth)
    14             {res = depth; return;}
    15         if(root->left)
    16             dfs(root->left, depth+1, res);
    17         if(root->right)
    18             dfs(root->right, depth+1, res);
    19     }
    20 };
    View Code

    还有一种更直观的递归解法,分别求左右子树的最小深度,然后返回左右子树的最小深度中较小者+1

     1 class Solution {
     2 public:
     3     int minDepth(TreeNode *root) {
     4         if(root == NULL)return 0;
     5         int minleft = minDepth(root->left);
     6         int minright = minDepth(root->right);
     7         if(minleft == 0)
     8             return minright + 1;
     9         else if(minright == 0)
    10             return minleft + 1;
    11         else return min(minleft, minright) + 1;
    12     }
    13 };

    算法2:层序遍历二叉树,找到最先遍历到的叶子的层数就是树的最小高度

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  * int val;
     5  * TreeNode *left;
     6  * TreeNode *right;
     7  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int minDepth(TreeNode *root) {
    13         // IMPORTANT: Please reset any member data you declared, as
    14         // the same Solution instance will be reused for each test case.
    15          //层序遍历,碰到第一个叶子节点就停止,NULL作为每一层节点的分割标志
    16         if(root == NULL)return 0;
    17         int res = 0;
    18         queue<TreeNode*> Q;
    19         Q.push(root);
    20         Q.push(NULL);
    21         while(Q.empty() == false)
    22         {
    23             TreeNode *p = Q.front();
    24             Q.pop();
    25             if(p != NULL)
    26             {
    27                 if(p->left)Q.push(p->left);
    28                 if(p->right)Q.push(p->right);
    29                 if(p->left == NULL && p->right == NULL)
    30                 {
    31                     res++;
    32                     break;
    33                 }
    34             }
    35             else 
    36             {
    37                 res++;
    38                 if(Q.empty() == false)Q.push(NULL);
    39             }
    40         }
    41         return res;
    42     }
    43 };

     本文地址


    LeetCode:Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth.

    The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

    算法1:dfs递归求解

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  * int val;
     5  * TreeNode *left;
     6  * TreeNode *right;
     7  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxDepth(TreeNode *root) {
    13         // IMPORTANT: Please reset any member data you declared, as
    14         // the same Solution instance will be reused for each test case.
    15         if(root == NULL)return 0;
    16         int res = INT_MIN;
    17         dfs(root, 1, res);
    18         return res;
    19     }
    20     void dfs(TreeNode *root, int depth, int &res)
    21     {
    22         if(root->left == NULL && root->right == NULL && res < depth)
    23             {res = depth; return;}
    24         if(root->left)
    25             dfs(root->left, depth+1, res);
    26         if(root->right)
    27             dfs(root->right, depth+1, res);
    28     }
    29 };
    View Code

    同上一题

     1 class Solution {
     2 public:
     3     int maxDepth(TreeNode *root) {
     4         if(root == NULL)return 0;
     5         int maxleft = maxDepth(root->left);
     6         int maxright = maxDepth(root->right);
     7         if(maxleft == 0)
     8             return maxright + 1;
     9         else if(maxright == 0)
    10             return maxleft + 1;
    11         else return max(maxleft, maxright) + 1;
    12     }
    13 };

    算法2:层序遍历,树的总层数就是树的最大高度

     1 /**
     2  * Definition for binary tree
     3  * struct TreeNode {
     4  * int val;
     5  * TreeNode *left;
     6  * TreeNode *right;
     7  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     int maxDepth(TreeNode *root) {
    13         // IMPORTANT: Please reset any member data you declared, as
    14         // the same Solution instance will be reused for each test case.
    15         //层序遍历计算树的层数即可,NULL作为每一层节点的分割标志
    16         if(root == NULL)return 0;
    17         int res = 0;
    18         queue<TreeNode*> Q;
    19         Q.push(root);
    20         Q.push(NULL);
    21         while(Q.empty() == false)
    22         {
    23             TreeNode *p = Q.front();
    24             Q.pop();
    25             if(p != NULL)
    26             {
    27                 if(p->left)Q.push(p->left);
    28                 if(p->right)Q.push(p->right);
    29             }
    30             else 
    31             {
    32                 res++;
    33                 if(Q.empty() == false)Q.push(NULL);
    34             }
    35         }
    36         return res;
    37     }
    38 };

    【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3440059.html

  • 相关阅读:
    Go语言趣学指南lesson3
    简单的>this
    多媒体查询
    解析对象原型链
    笑对人生,坐看云起云落
    HTML5
    javascript函数及作用域的小结
    不得不知call()和apply()
    浅谈弹性盒子布局
    编译原理实验(算符优先文法)
  • 原文地址:https://www.cnblogs.com/TenosDoIt/p/3440059.html
Copyright © 2011-2022 走看看