博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树的总结--树的性质(树的深度) leetcode
阅读量:5901 次
发布时间:2019-06-19

本文共 3414 字,大约阅读时间需要 11 分钟。

Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from

the root node down to the nearest leaf node.

递归解法

说明

如果一个node的左儿子为空 右儿子不空 从root 到左儿子的路径不算是minimum deepth因为左儿子不算这个node的leaf node所以要比最大深度那道题要多一个判断:

如果左儿子空返回右儿子的deepth 右儿子空返回左儿子deepth

复杂度

时间O(n)空间栈O(logn)

代码

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

广度优先搜索

说明

用BFS方法, 遇到第一个子叶都为空得节点返回当前深度

复杂度

时间O(n), 空间时间O(n)

代码

public int minDepth(TreeNode root) {        if (root == null) {            return 0;        }        Queue
queue = new LinkedList
(); queue.offer(root); int res = 0; while (!queue.isEmpty()){ int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); if (node.left == null && node.right == null) { return res + 1;//node已经算入了 所以要+1 } if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } res += 1; } return res; }

Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from

the root node down to the farthest leaf node.

递归解法

说明

递归条件是,它的最大深度是它左子树的最大深度和右子树最大深度中较大的那个加1.返回条件是遇到null节点返回0.

复杂度

时间O(n)空间栈O(logn)

代码

public class Solution {    public int maxDepth(TreeNode root) {        if (root == null){            return 0;        }        int left = maxDepth(root.left);        int right = maxDepth(root.right);        return Math.max(left, right) + 1//深度=子数深度+1;    }

广度优先搜索

说明

用BFS方法, 直到遍历完整个树返回最长深度

复杂度

时间O(n), 空间O(n)

代码

public int maxDepth(TreeNode root) {        if (root == null) {            return 0;        }        Queue
queue = new LinkedList
(); queue.offer(root); int res = 0; while (!queue.isEmpty()){ int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } } res += 1; } return res; }

Balanced Binary Tree

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary

tree in which the depth of the two subtrees of every node never differ
by more than 1.

递归

说明

还是求树的深度问题, 但是当左子树和右子树不平衡的时候要向上返回-1, 这样如果最后结果为-1则有不平衡的子树

复杂度

时间O(n), 空间栈O(logn)

代码

public boolean isBalanced(TreeNode root) {    return checkBalance(root) != -1;}public int checkBalance(TreeNode root){    if (root == null){        return 0;    }    int left = checkBalance(root.left);    int right = checkBalance(root.right);    if (left == -1|| right == -1|| Math.abs(left - right) > 1){        return -1;    }//如果left或者right不平衡就网上返回-1;    return Math.max(left, right) + 1;}

转载地址:http://rdupx.baihongyu.com/

你可能感兴趣的文章
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
查看>>
Windows 8部署系列PART3:配置WDS服务器环境
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
更改UIView的背景
查看>>
JLNotebookView
查看>>
StackPanel
查看>>
SPUserResizableView
查看>>
UML类图示例
查看>>
sh ./ 执行区别
查看>>
宏定义(#ifndef+#define+#endif)的作用
查看>>
Prometheus安装部署以及配置
查看>>
Oracle存储过程大冒险-2存储过程常用语法
查看>>
taobao-pamirs-schedule-2.0源码分析——类设计
查看>>
10位程序员眼中的2007:寻找软件开…
查看>>
Stream API
查看>>