二叉树深度递归与非递归

2018-11-12  本文已影响0人  啦啦哇哈哈

二叉树的最大深度

下面给出递归算法,非递归只需要在层序遍历的基础上进行改造就可以了。

    public int maxDepth(TreeNode root) {
            if(root == null){
                return 0;
            }
            if(root.right == null){
                return maxDepth(root.left) + 1;
            }
            if(root.left == null){
                return maxDepth(root.right) + 1;
            }
            
            return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
    }

二叉树的最小深度

        public int MinDepth(TreeNode root) {
            if(root == null){
                return 0;
            }
            if(root.left == null){
                    return MinDepth(root.right) + 1;
                }
                if(root.right == null){
                    return MinDepth(root.left) + 1;
                }

            return Math.min(MinDepth(root.left),MinDepth(root.right)) + 1;
        }
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int depth = 1;
        while(!queue.isEmpty()){
            int l = queue.size();
            while(l -- > 0){
                TreeNode node = queue.poll();
                if(node.left == null && node.right == null){
                    return depth;
                }
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
            depth ++;
        }        
        return depth;
    }

N叉树的最大深度

    public int maxDepth(Node root) {
        if(root == null){
            return 0;
        }
        
        int max = 0;
        for(Node node : root.children){
            int depth = maxDepth(node);
            if(max < depth){
                max = depth;
            }
        }
        
        return max + 1;
    }
上一篇下一篇

猜你喜欢

热点阅读