经典的求二叉树深度问题的两种解法DFS/BFS

二叉树的深度

http://www.nowcoder.com/questionTerminal/435fb86331474282a3499955f0a41e8b

// 方法1:方法栈+DFS
// 思路:若当前节点为null则直接返回0,否则递归左右子树,计算其深度,取较大者+1进行返回
// 时间复杂度:O(n),其中n为节点个数
public int TreeDepth(TreeNode root) {
    // 设置递归出口1
    if(root == null) return 0;
    // 若当前节点不为null,则递归计算左右子树深度,取较大者+1返回
    return Math.max(TreeDepth(root.left),TreeDepth(root.right))+1;
}
// 方法2:队列+BFS
// 思路:使用队列进行层次遍历.若root节点不为null,则将其加入到队列中,
// 然后当队列非空时就进行层次遍历,每次遍历时,层次+1.直到遍历结束,返回层次.
// 时间复杂度:O(n),其中n为节点个数
public int TreeDepth(TreeNode root) {
    // 排除特殊情况
    if(root == null) return 0;
    // 创建辅助队列
    Queue<TreeNode> queue = new LinkedList<>();
    queue.offer(root);
    int size,level = 0;
    TreeNode tmp;
    // 层次遍历
    while(!queue.isEmpty()){
        level++;
        size = queue.size();
        while(size-->0){
            tmp = queue.poll();
            if(tmp.left != null) queue.offer(tmp.left);
            if(tmp.right != null) queue.offer(tmp.right);
        }
    }
    // 返回层次
    return level;
}
全部评论

相关推荐

宇算唯航:目测实缴资本不超100W的小公司
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 14:10
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务