二叉树的深度、高度
二叉树的深度是指从根节点到叶子节点的最长路径上的节点数。
二叉树的高度是指从该节点到叶子结点的最长简单路径边的条数。
一、最大深度
104. 二叉树的最大深度 - 力扣(LeetCode)
最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
//递归法
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public int maxDepth(TreeNode root) {return getdepth(root);}public int getdepth(TreeNode root){if(root==null)return 0;int rdepth=getdepth(root.right);int ldepth=getdepth(root.left);int depth=Math.max(rdepth,ldepth)+1;return depth;}
}
二、最小深度
111. 二叉树的最小深度 - 力扣(LeetCode)
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
//递归法
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public int minDepth(TreeNode root) {return getdepth(root);}public int getdepth(TreeNode root){if(root==null)return 0;int rdepth=getdepth(root.right);int ldepth=getdepth(root.left);if(root.left==null&&root.right!=null)return rdepth+1;//左为空,右不为空,说明此时不是最近叶子结点if(root.left!=null&&root.right==null)return ldepth+1;//左不为空,右为空,说明此时不是最近叶子结点int depth=Math.min(rdepth,ldepth)+1;return depth;}
}
三、平衡二叉树
110. 平衡二叉树 - 力扣(LeetCode)
定义:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root)==-1?false:true;}public int getHeight(TreeNode root){if(root==null)return 0;int rheight=getHeight(root.right);if(rheight==-1)return -1;int lheight=getHeight(root.left);if(lheight==-1)return -1;return Math.abs(rheight-lheight)>1?-1:1+Math.max(rheight,lheight);}
}