输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在牛客网上刷到的题,已经成功通过,但是回过头来看,似乎发现有点问题。
第一次看到题目的时候,就想到了,如果一个树是一个平衡二叉树,那么它的左右孩子树深度的绝对值肯定是小于等于1的。
先求出根节点的左右孩子的深度,然后判断绝对值是否小于1,代码如下:
public class Solution {
public int depth(TreeNode root){
if(root == null)
return 0;
return Math.max(depth(root.left),depth(root.right))+1;
}
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null )
return true;
int q = depth(root.left)-depth(root.right);
if(q ==1 || q==-1 || q==0 )
return true;
return false;
}
}
当再次看见这个代码的时候,就感觉代码是否存在问题,在判断的时候,只对它的根节点做了判断,但是没有进一步对它的左右孩子在进行判断,例如下图中所示,应该不是一个平衡二叉树:
所以,又对代码进行了添加,创建了二叉树,来判断它是否是一棵平衡二叉树:
package study.nowcoder;
import suanFa.btTree.Tree;
import java.util.Scanner;
class Solution17 {
public int depth(BtNode root){
if(root == null)
return 0;
return Math.max(depth(root.getLeftChild()),depth(root.getRightChild()))+1;
}
public boolean IsBalanced_Solution(BtNode root) {
if(root == null )
return true;
int q = depth(root.getLeftChild())-depth(root.getRightChild());
if(q ==1 || q==-1 || q==0 )
return true;
return false;
}
}
class BtNode{
private char data;
private BtNode leftChild;
private BtNode rightChild;
public BtNode(){
data = '#';
leftChild = null;
rightChild = null;
}
public BtNode(char data){
this(data,null,null);
this.data = data;
}
public BtNode(char data, BtNode leftChild, BtNode rightChild) {
this.data = data;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
public char getData() {
return data;
}
public void setData(char data) {
this.data = data;
}
public BtNode getLeftChild() {
return leftChild;
}
public void setLeftChild(BtNode leftChild) {
this.leftChild = leftChild;
}
public BtNode getRightChild() {
return rightChild;
}
public void setRightChild(BtNode rightChild) {
this.rightChild = rightChild;
}
}
public class IsBalanced_Solution {
//创建二叉树,使用先序遍历
public BtNode creatBt(){
char ch;
BtNode s ;
Scanner scanner = new Scanner(System.in);
String ch1 = scanner.next();
ch = ch1.toCharArray()[0];
if(ch != '#'){
s = new BtNode(ch);
s.setLeftChild(creatBt());
s.setRightChild(creatBt());
}else{
return null;
}
return s;
}
public static void main(String[] args) {
IsBalanced_Solution isBalanced_solution = new IsBalanced_Solution();
BtNode root = isBalanced_solution.creatBt();
Solution17 solution17 = new Solution17();
System.out.println(solution17.IsBalanced_Solution(root));
}
}
发现,对上面的树进行创建的过程中,就会返回false,但是,到现在,我还是不知道这个代码是否存在问题。
看过牛客网上别人提交的代码,都有对左右孩子的判断。