zoukankan      html  css  js  c++  java
  • 平衡二叉树

    题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    思路分析:常规的办法我们肯定能想到通过调用深度的函数来递归计算出左右子树的深度,并进行判断是否满足平衡因子小于等于1,也就是如下的方法:

     public boolean IsBalanced_Solution(TreeNode root) {
            if(root==null)
                return true;
             int  left = TreeDepth(root.left);
             int  right = TreeDepth(root.right);
             int n = left-right;
             if(n>1||n<-1)
                 return false;
            return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
          
        }
        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);   
        }

    但往往这样的话会重复计算一些结点的深度,所以更好的办法是利用自底向上遍历的方法,边遍历边判断是否满足,对代码进行改进:

      private boolean isBalanced=true;
        public boolean IsBalanced_Solution(TreeNode root) {
             
            TreeDepth(root);
            return isBalanced;
        }
        public int TreeDepth(TreeNode root){
            if(root==null)
                return 0;
            int left=TreeDepth(root.left);
            int right=TreeDepth(root.right);
             
            if(Math.abs(left-right)>1){
                isBalanced=false;
            }
            return right>left ?right+1:left+1;
             
        }

    和原来不同的是在TreeDepth方法中,多了一步判断:

    if(Math.abs(left-right)>1){
                isBalanced=false;
            }

    这样便满足了节省计算时间的要求。

  • 相关阅读:
    python中if __name__ == '__main__': 的解析
    python项目练习地址
    HTTP Response Splitting攻击探究 <转>
    常用操作系统扫描工具介绍
    app兼容性测试的几种方案
    svn自动备份并上传到ftp
    有关交易的性能测试点
    修改文件测试的测试点
    新增文件测试的测试点
    添加附件测试的测试点
  • 原文地址:https://www.cnblogs.com/Dream-chasingGirl/p/10198103.html
Copyright © 2011-2022 走看看