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  };
    错误代码
  • 相关阅读:
    Cpp Chapter 12: Classes and Dynamic Memory Allocation Part1
    Cpp Chapter 11: Working with Classes Part2
    Cpp Chapter 11: Working with Classes Part1
    Cpp Chapter 10: Objects and Classes Part2
    摄影技术学习
    安装texlive2017(latex的编译软件)
    文献管理工具的使用(Mendeley和Endnote)
    函数的级数展开和渐近展开
    常用英语语法小结
    常微分方程
  • 原文地址:https://www.cnblogs.com/kbe317/p/4503460.html
Copyright © 2011-2022 走看看