110. Balanced Binary Tree
来源:互联网 发布:松江 量化 java 招聘 编辑:程序博客网 时间:2024/06/06 12:26
110. 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)从根节点开始得遍历会导致很多节点的多次遍历,代码如下:
int treeDepth(TreeNode* root) { if(root == NULL) return 0; queue<TreeNode*> que; que.push(root); int countLevNodes = 1; int depth = 0; while(!que.empty()) { TreeNode* temp = que.front(); que.pop(); countLevNodes--; if(temp->left != NULL) que.push(temp->left); if(temp->right != NULL) que.push(temp->right); if(countLevNodes == 0) { depth++; countLevNodes = que.size(); } } return depth; } bool isBalanced(TreeNode* root) { if(NULL == root) return true; int left = treeDepth(root->left); int right = treeDepth(root->right); int diff = abs(left - right); if(diff > 1) return false; return isBalanced(root->left)&&isBalanced(root->right); }(2)从后序开始遍历,使得很多节点的遍历只用遍历一次
采用的后续遍历的方式遍历二叉树的每一个节点的,在遍历到一个节点之前我们就已经遍历了它的左右子树。只要在遍历每个节点的时候记录它的深度(某一节点的深度等于
它到叶结点的路径的长度),我们就可以一边遍历一边判断每个节点是不是平衡的
bool isBalanced(TreeNode* root,int* pdepth) { if(NULL == root) { *pdepth = 0; return true; } int left,right; if(isBalanced(root->left,&left)&&isBalanced(root->right,&right)) { int diff = left - right; if(abs(diff)<=1) { *pdepth = 1 + (left>right?left:right); return true; } } return false; } bool isBalanced(TreeNode* root) { int depth = 0; return isBalanced(root,&depth);//由于每一次调用该函数都要去改变depth的数值,所以depth为引用传递 }
方法二、采用dfs的方法来计算每个节点的左右孩子节点的高度
int dfsHeight (TreeNode *root) { if(NULL == root) return 0; int leftHeight = dfsHeight(root->left); if(leftHeight == -1) return -1; int rightHeight = dfsHeight(root->right); if(rightHeight == -1) return -1; if (abs(leftHeight - rightHeight) > 1) return -1; return max (leftHeight, rightHeight) + 1; } bool isBalanced(TreeNode* root) { return dfsHeight(root) != -1; }
0 0
- 110.Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 110. Balanced Binary Tree
- 搭建lamp环境
- mysql的默认字符编码的设置
- C++单例基类模板
- Redis 学习笔记十 发布者订阅者模式与生产者消费者模式
- spring-boot集成swagger(接口管理工具)
- 110. Balanced Binary Tree
- Aerospike数据库实战(四) -- Aerospike 安装部署
- xcode8.2 cocoapods install第三方库 遇到Abort trap :6 的问题 的解决办法
- 几个简单的导航布局
- 第三章SQL编程--经典案例和上级题
- 项目制作随感
- 接口化编程(iOS)
- jgroups 集群 the following properties in UNICAST are not recognized
- ucos任务调度