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

    题目描述

    输入一棵二叉树,判断该二叉树是否是平衡二叉树。
    /*
    public class TreeNode
    {
        public int val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode (int x)
        {
            val = x;
        }
    }*/

    分析:通过计算左右子树的高度差的绝对值来判断是否为平衡二叉树
    常规思路:从根节点开始,求根左右子树高度,如果高度差大于1,返回false;否则递归判断左右子树是否满足条件
    class Solution
    {
       bool isBalance=true;
        public bool IsBalanced_Solution(TreeNode pRoot)
        {
            if(pRoot==null)
                return true;
            else if(System.Math.Abs(TreeDepth(pRoot.left)-TreeDepth(pRoot.right))>1)
                return false;
            else
                return IsBalanced_Solution(pRoot.left)&&IsBalanced_Solution(pRoot.right);  
        }
        public int TreeDepth(TreeNode root)
        {
            if(root==null) return 0;
            return System.Math.Max(TreeDepth(root.left), TreeDepth(root.right))+1;
        }
    }
    另解:常规思路重复的计算子树的高度。可以用后序遍历,从下到上遍历如果子树中任一不满足条件返回 false,否则返回 true 这样每个节点的高度只会算一次。
    class Solution
    {
        bool isBalanced=true;
        
        public int GetHeight(TreeNode pRoot)
        {
            if(pRoot==null)
                return 0;
            else
            {
                int left=GetHeight(pRoot.left);
                int right=GetHeight(pRoot.right);
                if(System.Math.Abs(left-right)<=1)
                    isBalanced=true;
                else
                    isBalanced=false;
                return left>right?left+1:right+1;
            }
        }
        
        public bool IsBalanced_Solution(TreeNode pRoot)
        {
            GetHeight(pRoot);
            return isBalanced;
        }
    }
    复习回顾知识点:
    <C#中Math>
    Math.Ceil() 向上进位取整;Math.RoundToInt() 四舍五入到整数
    Math.Round() 四舍五入;Math.Abs() 取绝对值
    System.Math.Max(a,b) a,b中较大数;System.Math.Min(a,b) a,b中较小数
    Math.Log(a,b) 以b为底a的对数;Math.Sin(a) 弧度为a的正弦值
    Math.PI π的数值;Math.E e的数值
     
  • 相关阅读:
    第05组 Alpha冲刺(2/4)
    Alpha冲刺(1/4)
    第04组 Beta冲刺(4/4)
    第04组 Beta冲刺(3/4)
    第04组 Beta冲刺(2/4)
    第04组 Beta冲刺(1)
    第04组 Alpha事后诸葛亮
    第04组 Alpha冲刺(4/4)
    第04组 Alpha冲刺(3/4)
    第04组 Alpha冲刺(2/4)
  • 原文地址:https://www.cnblogs.com/sherryke/p/10202398.html
Copyright © 2011-2022 走看看