zoukankan      html  css  js  c++  java
  • leetcode 104 Maximum Depth of Binary Tree二叉树求深度

    Maximum Depth of Binary Tree
    Total Accepted: 63668 Total Submissions: 141121 My Submissions
    Question Solution

    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.

    我的解决方案:
    这里写图片描述

    /**
     * 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 maxDepth(TreeNode* root)
        {
    
    
            if(NULL == root)
                return 0;
    
            int depth_l = maxDepth(root->left);
            int depth_r = maxDepth(root->right);
    
            return depth_l > depth_r  ? depth_l + 1:depth_r + 1;
    
    
        }
    };

    一行代码的解法:

    int maxDepth(TreeNode *root)
    {
        return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;
    }
    

    不用递归的解法:Breadth-first-search

    int maxDepth(TreeNode *root)
    {
        if(root == NULL)
            return 0;
    
        int res = 0;
        queue<TreeNode *> q;
        q.push(root);
        while(!q.empty())
        {
            ++ res;
            for(int i = 0, n = q.size(); i < n; ++ i)
            {
                TreeNode *p = q.front();
                q.pop();
    
                if(p -> left != NULL)
                    q.push(p -> left);
                if(p -> right != NULL)
                    q.push(p -> right);
            }
        }
    
        return res;
    }
    

    不用递归的解法2

    int maxDepth(TreeNode *root)
    {
        if (root == NULL) return 0;
        stack<TreeNode *> gray;
        stack<int> depth;
        int out = 0;
    
        gray.push(root);
        depth.push(1);
        while (!gray.empty()) {
            TreeNode *tmp = gray.top();
            int num = depth.top();
            gray.pop();
            depth.pop();
            if (tmp->left == NULL && tmp->right == NULL) {
                out = num > out ? num : out;
            }
            else {
                if (tmp->left != NULL) {
                    gray.push(tmp->left);
                    depth.push(num + 1);
                }
                if (tmp->right != NULL) {
                    gray.push(tmp->right);
                    depth.push(num + 1);
                }
            }
        }
        return out;
    }
    

    python 的解决方案:

    # Definition for a  binary tree node
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        # @param root, a tree node
        # @return an integer
        def maxDepth(self, root):
    
            def maxDepthHelper(root):
                if not root: return 0
                return max(1+maxDepthHelper(root.left), 1+maxDepthHelper(root.right))
    
            return maxDepthHelper(root)
    
  • 相关阅读:
    美国航天局的十大编码戒律(转)
    大型数据库应用解决方案总结
    IOCP模型
    SSH 连接慢的解决方案详解
    指针(详解)【转】
    有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别【转】
    USB入门开发的八个问题&USB枚举『转』
    浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)
    KEIL Code RO-data RW-data ZI-data 【转】
    262K Color
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301334.html
Copyright © 2011-2022 走看看