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;
            }

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

  • 相关阅读:
    理解javascript作用域及hosting机制
    angular分页指令
    python 设计模式之门面模式
    代码Rework中的反思
    python 设计模式之观察者模式
    python 设计模式之命令模式
    Django性能调优
    python 设计模式之MVC模式
    httperf+autobench测试web应用
    对工作的感悟
  • 原文地址:https://www.cnblogs.com/Dream-chasingGirl/p/10198103.html
Copyright © 2011-2022 走看看