µ±Ç°Î»ÖãºC++¼¼ÊõÍø > ×ÊѶ > Êý¾Ý½á¹¹±Ê¼Ç·ÖÏí£º32 ÈçºÎÅжÏÒ»¿Ã¶þ²æÊ÷ÊÇ·ñÊÇƽºâ¶þ²æÊ÷

Êý¾Ý½á¹¹±Ê¼Ç·ÖÏí£º32 ÈçºÎÅжÏÒ»¿Ã¶þ²æÊ÷ÊÇ·ñÊÇƽºâ¶þ²æÊ÷

¸üÐÂʱ¼ä£º2016-01-27 22:34:02ä¯ÀÀ´ÎÊý£º1+´Î

Ë㷨˼·£ºÏȱàдһ¸ö¼ÆËã¶þ²æÊ÷Éî¶ÈµÄº¯ÊýGetDepth£¬ÀûÓõݹéʵÏÖ£»È»ºóÔٵݹéÅжÏÿ¸ö½ÚµãµÄ×óÓÒ×ÓÊ÷µÄÉî¶ÈÊÇ·ñÏà²î1


static int GetDepth(BinNode root)
{
  if (root == null)
      return 0;
  int leftLength = GetDepth(root.Left);
  int rightLength = GetDepth(root.Right);
  return (leftLength > rightLength
leftLength : rightLength) + 1;
}

×¢ÒâÕâÀïµÄ+1£¬¶ÔÓ¦ÓÚroot²»Îª¿Õ£¨Ëã×÷µ±Ç°1¸öÉî¶È£©


static bool IsBalanceTree(BinNode root)
{
  if (root == null)
      return true;
  int leftLength = GetDepth(root.Left);
  int rightLength = GetDepth(root.Right);
  int distance = leftLength > rightLength
leftLength - rightLength : rightLength -leftLength;
 
  if (distance > 1)
      return false;
  else
      return IsBalanceTree(root.Left) && IsBalanceTree(root.Right);
}

ÉÏÊö³ÌÐòµÄÂß¼­ÊÇ£¬Ö»Òªµ±Ç°½ÚµãrootµÄLeftºÍRightÉî¶È²î²»³¬¹ý1£¬¾ÍµÝ¹éÅжÏLeftºÍRightÊÇ·ñÒ²·ûºÏÌõ¼þ£¬Ö±µ½ÎªLeft»òRightΪnull£¬ÕâÒâζ×ÅËüÃǵÄÉî¶ÈΪ0£¬ÄÜ×ßµ½ÕâÒ»²½£¬Ç°Ãæ±ØÈ»¶¼·ûºÏÌõ¼þ£¬ËùÒÔÕû¸ö¶þ²æÊ÷¶¼·ûºÏÌõ¼þ¡£