【Java】【JS】LeetCode - 递归 - 迭代 - #104 二叉树的最大深度

 int val;

 TreeNode left;

 TreeNode right;

 TreeNode(int x) { val = x; }

}


function TreeNode(val) {

 this.val = val;

 this.left = this.right = null;

}




 **#104 二叉树的最大深度**

==================



给定一个二叉树,找出其最大深度。



二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。



**说明:** 叶子节点是指没有子节点的节点。



![](https://img-blog.csdnimg.cn/20200605151528981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NhYnJpbmFfY2M=,size_16,color_FFFFFF,t_70)



### **方法一:递归**



递归计算树的左右子树的高度。树的高度=max(左子树高度,右子树高度)+1



// java

class Solution {

public int maxDepth(TreeNode root) {

    if(root == null){

        return 0;

    }

    return Math.max(maxDepth(root.left), maxDepth(root.right))+1;

}

}




### **方法二:迭代**



BFS层序遍历+队列实现



记录二叉树的层数,队列中放入一层的节点,依次拿出,再放入下一层全部节点。



class Solution {

public int maxDepth(TreeNode root) {

    if(root == null){

        return 0;

    }

    LinkedList<TreeNode> queue = new LinkedList<>();

    queue.add(root);

    int maxheight = 0;

    while(queue.size()>0){

        maxheight++;

        int size = queue.size();

        for(int i = 0; i < size; i++){

            TreeNode node = queue.removeFirst();

            if(node.left!=null){

                queue.add(node.left);

            }

            if(node.right!=null){

                queue.add(node.right);

            }

        }

    }

    return maxheight;

}

}




DFS前序遍历+栈实现



// java

class Solution {

public int maxDepth(TreeNode root) {

    if(root == null){

        return 0;

    }

    LinkedList<TreeNode> stack = new LinkedList<>();

    stack.push(new Pair<>(root, 1));

    int maxheight = 0;

    // DFS 每个节点记录深度

    while(!stack.isEmpty()){

        Pair<TreeNode, Integer> pair = stack.pop();

        TreeNode node = pair.first;

        // 更新高度

        maxheight = Math.max(maxheight, pair.second);

        int curheight = pair.second;

        // 子节点入栈,深度加一

        if(node.right!=null){

            stack.push(new Pair<>(node.right, curheight+1));

        }

        if(node.left!=null){

            stack.push(new Pair<>(node.left, curheight+1));

        }

    }



    return maxheight;

}

}


/* javascript

  • @param {TreeNode} root

  • @return {number}

*/

var maxDepth = function(root) {

var tmpStack = [

总结

阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。

最新阿里蚂蚁金服四面(已拿offer)Java技术面经总结

最新阿里蚂蚁金服四面(已拿offer)Java技术面经总结

最新阿里蚂蚁金服四面(已拿offer)Java技术面经总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值