Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40233
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2013-12-13 10:45:05

递归检查每个节点其左右子树最大深度差不超过1即可。



点击(此处)折叠或打开

  1. /**
  2.  * Definition for binary tree
  3.  * struct TreeNode {
  4.  * int val;
  5.  * TreeNode *left;
  6.  * TreeNode *right;
  7.  * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8.  * };
  9.  */
  10. class Solution {
  11. public:
  12.     void depth(TreeNode *node, int dep, int *maxdep)
  13.     {
  14.         if(NULL==node) {if(*maxdep<dep) *maxdep=dep; return;}
  15.         dep++;
  16.         depth(node->left, dep, maxdep);
  17.         depth(node->right, dep, maxdep);
  18.     }
  19.     bool isBalanced(TreeNode *root) {
  20.         if(NULL==root) return true;
  21.         int leftdep=0;
  22.         int rightdep=0;
  23.         depth(root->left,0,&leftdep);
  24.         depth(root->right,0,&rightdep);
  25.         if(abs(leftdep-rightdep)>1) return false;
  26.         return isBalanced(root->left)&&isBalanced(root->right);
  27.     }
  28. };

阅读(94) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~