平衡二叉树
Posted 氵冫丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡二叉树相关的知识,希望对你有一定的参考价值。
题目
输入一棵二叉树,判断该二叉树是否是平衡二叉树
解题
平衡二叉树:每个节点左右子树的高度差只能是:-1、0、1
判断每个节点左右子树高度是否满足上面条件
import java.util.LinkedList;
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root ==null)
return true;
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
int diff = left - right;
if(diff>=-1 && diff <=1){
return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
}else{
return false;
}
}
public int TreeDepth(TreeNode pRoot){
if(pRoot ==null)
return 0;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(pRoot);
int depth = 0;
while(!queue.isEmpty()){
int size = queue.size();
depth++;
while(size-- >0){
TreeNode node = queue.poll();
if(node.left!=null)
queue.add(node.left);
if(node.right!=null)
queue.add(node.right);
}
}
return depth;
}
}
讨论中看到下面的程序,利用后序遍历,先求出左右子树的高度,判断条件,满足继续,不满足停止,这里没有严格的求每个节点的高度
import java.util.LinkedList;
public class Solution {
private boolean isBalanced=true;
public boolean IsBalanced_Solution(TreeNode root) {
getDepth(root);
return isBalanced;
}
public int getDepth(TreeNode root){
if(root==null)
return 0;
int left=getDepth(root.left);
int right=getDepth(root.right);
if(Math.abs(left-right)>1){
isBalanced=false;
root =null;
}
return right>left ?right+1:left+1;
}
}
以上是关于平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章