题解_C:
/**
* Definition for a Node.
* struct Node {
* int val;
* int numChildren;
* struct Node** children;
* };
*/
int* maxDepth(struct Node* root) {
if(!root){
return 0;
}
int max = 0;
int i;
for(i=0; i<root->numChildren; ++i){
int t = maxDepth(root->children[i]);
max = max>t?max:t;
}
return max+1;
}
题解_Java:
/*
// Definition for a Node.对树节点的定义
class Node {
public int val;
public List<Node> children; //没懂
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public int maxDepth(Node root) {
if (root == null) {
return 0;
} else if (root.children.isEmpty()) {
return 1;
} else {
List<Integer> heights = new LinkedList<>();
for (Node item : root.children) { //增强for循环
heights.add(maxDepth(item));
}
return Collections.max(heights) + 1;
}
}
}
相关知识:
增强for语句
- 语法
for(元素类型 e:数组或集合对象){
}
冒号左边是定义变量,右边必须是数组或集合类型
int[] arr = {1,2,3};
for(int i:arr){
System.out.println(i);
}
/**增强for内部会依次把arr中的元素赋给变量i**/
- 增强for的优缺点
只能从头到尾的遍历数组或集合,而不能只遍历部分;
在遍历list或数组时,不能获取当前元素下标;
增强for使用简单,简洁,代码优雅,这是它唯一的优点;
增强for比使用呢迭代器方便一点
PS:如果能使用增强for循环,一定要优先使用