N叉树的最大深度

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

输入[1,null,3,2,4,null,5,6]

输出3

地址

这道题很简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
int depth = 0;
int maxDepth(Node* root) {
loop(root,1);
return depth;
}
inline void loop(Node* root, int depth) {
if (root == nullptr)
{
return;
}
if (root->children.size() != 0)
{
for (auto i = root->children.begin(); i != root->children.end(); ++i)
{
loop(*i,depth+1);
}
}else{
if (depth > this->depth)
{
this->depth = depth;
}
}

}
};

以上是我的解法,但是运行速度并不是十分理想,应该还有更好的解题方案

统计二叉树中好节点的数目

给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。

「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。

输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。

输入:root = [3,3,null,4,2]
输出:3
解释:节点 2 -> (3, 3, 2) 不是好节点,因为 “3” 比它大。

链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

class Solution {
public:
int res = 0;
int goodNodes(TreeNode* root) {
visit(root, root->val);
return res;
}

void visit(TreeNode* node, int max) {
if (node == nullptr) {
return;
}
if (node->val >= max) {
visit(node->left, node->val);
visit(node->right, node->val);
res++;
return;
}
visit(node->left, max);
visit(node->right, max);
}
}