• 平衡二叉树


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

    思路分析:常规的办法我们肯定能想到通过调用深度的函数来递归计算出左右子树的深度,并进行判断是否满足平衡因子小于等于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;
            }

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

  • 相关阅读:
    CSS部分
    css基础
    css初探
    html表单
    mysql视图 触发器 事物 函数 存储过程
    pymysql
    mysql数据备份与操作
    html基础
    mysql 索引
    tuple,list,dict,set用法
  • 原文地址:https://www.cnblogs.com/Dream-chasingGirl/p/10198103.html
Copyright © 2020-2023  润新知