经典的求二叉树深度问题的两种解法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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务