-559. N叉树的最大深度- 递归解题思路

所用语言:Java

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val,List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/
class Solution {
    public int maxDepth(Node root) {
        
        if(root == null){
            return 0;
        }
        
        if(root.children == null || root.children.size() == 0){
            return 1;
        }
        int maxDep = 1;
        int tempDep = 0;
        
        for(Node node : root.children){
            tempDep = maxDepth(node) + 1 ;
            if(tempDep > maxDep){
                maxDep = tempDep;
            }
            tempDep = 0;
        }
        
        return maxDep;
    }
}

因为这道题是104. 二叉树的最大深度 这一题的衍生题,子节点由2个节点变成了一个链表,不过核心思路是一样的,使用递归就可以很容易做出来。

既然是递归,就得有边界条件,那么此处的边界条件就是传入的节点没有子节点。这个情况下就应该返回一个固定的深度1。表示这里递归就结束了。边界条件有了,那么还需要前进条件,就是再次调用自己这个方法的条件,参考二叉树的最大深度一题,当传入的节点有子节点时,就再次调用。

条件列出来了,就可以对剩余代码进行补充了,与二叉树那里不同的是,因为子节点时一个链表所以就使用了一个循环去遍历它,在循环内部求出每次递归返回的子节点最大深度,这样最后得到的maxDep也就是我们要求的最大深度。

发布了15 篇原创文章 · 获赞 14 · 访问量 7029

猜你喜欢

转载自blog.csdn.net/i_wonder_how_/article/details/90579354