leetcode_559:N叉树的最大深度

这个题目第一次看到当然很简单,求这种层数最基本的思路就是广度优先遍历了,思路简单,代码也不难。只是在设计队列的时候要注意里面要存放的是怎样的数据:

    public int maxDepth(Node root) {
        if (root == null)
            return 0;
        int result = 0;
        //队列存放当前的节点和节点所处的层数
        Queue<Pair<Node, Integer>> queue = new LinkedList<>();
        queue.add(new Pair<Node, Integer>(root, 1));
        while (!queue.isEmpty()) {
            Pair<Node, Integer> cur = queue.remove();
            Node curNode = cur.getKey();
            int curLevel = cur.getValue();
            result = curLevel;
            for (Node child : curNode.children) {
                queue.add(new Pair<Node, Integer>(child, curLevel+1));
            }
        }
        return result;
    }

主要想说的是还有一种深度优先的思路,这个是自己从来没有认真去想的,所以想在这里做个记录。深度优先的思路就是顺着每一个子节点走下去,走到头(叶子节点)的时候就返回0,否则就返回当前深度加1。这样到最后根节点汇聚,并求得了沿着每个路径走下去的最大值,得出结果,代码如下:

    public int maxDepth(Node root) {    
    	//根节点则返回0
        if(root == null)
            return 0;
        int depth = 0;
        //求每个子树的深度
        for(int i = 0;i<root.children.size();i++){
            depth = Math.max(depth,maxDepth(root.children.get(i)));
        }
        //返回子树深度+1
        return depth+1;
    }
发布了96 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/reachwang/article/details/103329985