week2-#111-Easy & #104-Easy

104原題地址:https://leetcode.com/problems/maximum-depth-of-binary-tree/description/

111原題地址:https://leetcode.com/problems/minimum-depth-of-binary-tree/description/

題目描述

把這兩題放一起因為是因為這兩題要求差不多,104題要求一棵二叉樹的最大深度,111題要求一棵二叉樹的最小深度。

104題思路

用DFS遍歷,每個DFS返回自己的兩個子節點的路徑長度中較大的那一個。
代碼如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int DFS(TreeNode* root,int current_depth){
        if(root==NULL){
            return current_depth;
        }
        current_depth+=1;
        int depth1 = DFS(root->left,current_depth);
        int depth2 = DFS(root->right,current_depth);
        return (depth1>depth2?depth1:depth2);
    }
    
    int maxDepth(TreeNode* root) {
        if(root==NULL){
            return 0;
        }
        int depth = 0;
        return DFS(root,depth);
    }
};

111題思路

111題求最小深度要比104麻煩一些,因為在DFS里不能直接返回兩個子節點的路徑長度里較小的那個,否則遇到一些節點的某個子節點為空就會直接返回到這個節點為止的路徑長度。如下圖

失敗樣例.png

如果直接返回子節點路徑長度里較小的那個,這個樣例里的返回值為2而不是3。所以這一題要根據子節點的具體情況來決定進行什么樣的操作。

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int DFS(TreeNode* root,int current_depth){
        current_depth+=1;
        if(root->left!=NULL && root->right!=NULL){
            int left =DFS(root->left,current_depth);
            int right = DFS(root->right,current_depth);
            return (left>right?right:left);
        }
        if(root->left == NULL && root->right ==NULL){
            return current_depth;
        }
        if(root->left!=NULL){
            return DFS(root->left,current_depth);
        }
        if(root->right !=NULL ){
            return DFS(root->right,current_depth);
        }
    }
    
    int minDepth(TreeNode* root) {
        if(root==NULL){
            return 0;
        }
        int depth = 0;
        return DFS(root,depth);
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,771評論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,922評論 2 36
  • 94. Binary Tree Inorder Traversal 中序 inorder:左節點->根節點->右節...
    Morphiaaa閱讀 587評論 0 0
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • 目錄 簡書的 markdown 都不支持 [TOC] 語法……我就不貼目錄了。下面按照類別,列出了29道關于二叉樹...
    被稱為L的男人閱讀 3,379評論 0 8