题意:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 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);
}
};