二叉樹平衡檢查

一、題目內容java

二叉樹平衡檢查函數

實現一個函數,檢查二叉樹是否平衡,平衡的定義以下,對於樹中的任意一個結點,其兩顆子樹的高度差不超過1。

 給定指向樹根結點的指針TreeNode* root,請返回一個bool,表明這棵樹是否平衡

二、題目解析this

平衡二叉樹:對於樹中的任意一個結點,其兩顆子樹的高度差不超過1。指針

實現一個求樹的高度(深度)的方法,判斷左右子樹高度差是否大於1。code

實現一個求樹的高度(深度)的方法的代碼:遞歸

public int TreeDepth(TreeNode root){
    if(root==null) return 0;
    int left = TreeDepth(root.left);//遞歸求左子樹的高度。
    int right = TreeDepth(root.right);//遞歸求右子樹的高度。
    return (left>right)?left+1:right+1; //左右子樹高度的最大值在加1就是樹的高度。
}

實現判斷二叉樹是否爲平衡二叉樹的代碼以下:it

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class Balance {
    public boolean isBalance(TreeNode root) {
        // write code here
        if(root==null) return true;
        int left = depth(root.left);
        int right = depth(root.right);
        int dif = left-right;
        if(dif>1||dif<-1)return false;
        return isBalance(root.left)&&isBalance(root.right);//判斷左右子樹是否平衡
    }
    public int depth(TreeNode root){
        if(root==null){
            return 0;
        }
        int left = depth(root.left);
        int right = depth(root.right);
        return (left>right)?left+1:right+1;
    }
}
相關文章
相關標籤/搜索