输入一棵二叉树,判断该二叉树是否是平衡二叉树。

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在牛客网上刷到的题,已经成功通过,但是回过头来看,似乎发现有点问题。
第一次看到题目的时候,就想到了,如果一个树是一个平衡二叉树,那么它的左右孩子树深度的绝对值肯定是小于等于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,但是,到现在,我还是不知道这个代码是否存在问题。
看过牛客网上别人提交的代码,都有对左右孩子的判断。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值