zoukankan      html  css  js  c++  java
  • Balanced Binary Tree

    原题

    Given a binary tree, determine if it is height-balanced.

    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

    判断一棵树是否是平衡二叉树,

    注意的问题

          1):递归判断左右子树的平衡性(第12行)

          2):左右子树高度相差大于1,而不是等于2,这不是生成平衡树(第10行)

          3):平衡树是不是搜索树?这是一个问题。。。

     1  class Solution 
     2   {
     3   public:
     4       bool isBalanced(TreeNode* root) 
     5           {
     6               if (root == NULL)
     7                   return true;
     8                int lh = height(root->left);
     9               int rh = height(root->right);
    10              if(lh - rh > 1 || rh - lh > 1)
    11                  return false;
    12              return isBalanced(root->left)&&isBalanced(root->right);
    13          }
    14  //求节点高度
    15      int height(TreeNode* &pos)
    16      {
    17          if(pos == NULL)
    18              return -1;
    19        //返回节点高度
    20          return max(height(pos->left),height(pos->right)) + 1; 
    21      }
    22  };
     1 class Solution 
     2  {
     3  public:
     4      bool isBalanced(TreeNode* root) 
     5      {
     6          if (root == NULL)
     7              return true;
     8          bool IsSearch = true;
     9          int lh = height(root->left,IsSearch);
    10          int rh = height(root->right,IsSearch);
    11          if(lh - rh == 2 || rh - lh == 2 || !IsSearch)
    12              return false;
    13          return true;
    14      }
    15      //求节点高度
    16      int height(TreeNode* &pos,bool &charge)
    17      {
    18          if(pos == NULL)
    19              return -1;
    20          if (pos->right != NULL)
    21          {
    22              if(pos->val >= pos->right->val)
    23              {
    24                  charge = false;
    25                  return 0;
    26              }
    27          }
    28          else if(pos->left != NULL)
    29          {
    30              if(pos->val <= pos->left->val)
    31              {
    32                  charge = false;
    33                  return 0;
    34              }
    35          }
    36          if(charge)
    37              return max(height(pos->left,charge),height(pos->right,charge)) + 1; 
    38          else
    39              return 0;
    40      }
    41  };
    错误代码
  • 相关阅读:
    建立适当的索引
    Windows 10Bash命令
    代码生成工具介绍和使用
    分布式的任务调度框架
    Net分布式系统
    Keepalived+LVS+Nginx负载均衡之高可用
    call,apply,bind
    2015搜狐在线笔试题(内存泄露问题)(转)
    十步完全理解SQL(转)
    Linux shell用法和技巧(转)
  • 原文地址:https://www.cnblogs.com/kbe317/p/4503460.html
Copyright © 2011-2022 走看看