104. 二叉树的最大深度

题意:

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],


image.png

返回它的最大深度 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 maxDepth(TreeNode* root) {
        
    }
};

思路:

求树的高度(遍历图)可以用深搜(dfs)和广搜(bfs),广搜需要在结构体中记录一下当前节点的高度,因为题目已经给定了结构体,所以不太适用,深搜可以边搜边记录信息,所以这里优先采用深搜,给一个我觉得比较好理解和书写的深搜模板吧。

// 第一次调用前先确定当前位置是不是已经越界 没越界再深搜
void dfs(记录的值,当前的位置,引用 要更新的值){
    用 记录的值 更新 要更新的值
    遍历下一个点的位置:
        if 下一个点不越界 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 maxDepth(TreeNode* root) {
        if (root == NULL) return 0;
        int ans = 0;
        dfs(1, root, ans);
        return ans;
    }
    void dfs(int h, TreeNode* node, int& ans){
        ans = max(ans, h);
        if(node->left != NULL) dfs(h+1, node->left, ans);
        if(node->right != NULL) dfs(h+1, node->right, ans);
    }
};

你可能感兴趣的:(104. 二叉树的最大深度)