二叉树深度计算及平衡二叉树的判定算法
2016-11-29 13:35
316 查看
首先是深度计算,采用递归算法,首先是递归退出条件,如果是一棵空树,深度为0,否则,二叉树的深度=左右子树较大的那个深度+1。
public int getDeep(TreeNode root) {
int res = 0;
if (root != null) {
int leftDeep = getDeep(root.getLeft());
int rightDeep = getDeep(root.getRight());
res = 1 + (leftDeep > rightDeep ? leftDeep : rightDeep);
}
return res;
}
然后是平衡二叉树的判定,仍然是采用递归,首先是递归退出条件,空树是平衡二叉树,然后是平衡二叉树的条件,左右子树深度之差不超过1,同时左右子树都是平衡二叉树。
public boolean isBalance(TreeNode root) {
if (root == null){
return true;
}
if (Math.abs(getDeep(root.getLeft()) - getDeep(root.getRight())) <= 1 && isBalance(root.getRight()) && isBalance(root.getLeft())){
return true;
}else{
return false;
}
}
public int getDeep(TreeNode root) {
int res = 0;
if (root != null) {
int leftDeep = getDeep(root.getLeft());
int rightDeep = getDeep(root.getRight());
res = 1 + (leftDeep > rightDeep ? leftDeep : rightDeep);
}
return res;
}
然后是平衡二叉树的判定,仍然是采用递归,首先是递归退出条件,空树是平衡二叉树,然后是平衡二叉树的条件,左右子树深度之差不超过1,同时左右子树都是平衡二叉树。
public boolean isBalance(TreeNode root) {
if (root == null){
return true;
}
if (Math.abs(getDeep(root.getLeft()) - getDeep(root.getRight())) <= 1 && isBalance(root.getRight()) && isBalance(root.getLeft())){
return true;
}else{
return false;
}
}
相关文章推荐
- 笔试算法题(16):二叉树深度计算 & 字符串全排列
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
- 求二叉树的深度,判定二叉树是否是平衡二叉树(java)
- 计算二叉树的深度+判断二叉树是否是平衡二叉树
- leetcode:Maximum Depth of Binary Tree(计算二叉树深度) 【面试算法】
- 数据结构与算法 -- 二叉树链式详解((非)/递归遍历,叶子个数,深度计算)
- 计算二叉树的深度,判断二叉树是否是平衡二叉树
- 二叉树深度和平衡二叉树的判定
- 求二叉树深度的算法
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 【Python排序搜索基本算法】之二叉树的深度和宽度
- 与二叉树有关的一些操作:先序,中序,后序,层次遍历,计算深度,叶结点数
- CSS优先级算法如何计算?有哪些判定规定及计算方式
- 数据结构--二叉树--求树的深度的算法(树遍历算法的应用)
- 计算二叉树的深度,结点的个数。
- 某研究院的二叉树深度优先遍历变种的算法面试题以及答案
- 百度研发深度学习新算法 图像计算速度提至12倍
- 剑指offer——二叉树的深度与平衡二叉树的判断
- C++数据结构--计算二叉树叶子数和深度
- 微软等数据结构+算法面试100题(35)-- 二叉树的深度