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); } }
|