lintcode balanced-binary-tree 平衡二叉树
来源:互联网 发布:跑跑卡丁车淘宝买号 编辑:程序博客网 时间:2024/06/05 03:13
问题描述
平衡二叉树
笔记
这个题是没想出来,最后参考了九章算法的解法,是最高效的,把depth函数做一点修改,如果不平衡的情况下返回-1。(代码1)
代码2是剑指offer的重复遍历子节点的程序。理解简单,效率最低。
代码3是代码2的改进版,不需要重复遍历节点。“一边遍历,一边记录深度”。
代码1
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution {public: /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ bool isBalanced(TreeNode *root) { // write your code here return depth(root) != -1; } int depth(TreeNode *root) { if (root == NULL) return 0; int left = depth(root->left); int right = depth(root->right); if (left == -1 || right == -1 || abs(left-right) > 1) return -1; return max(left, right) + 1; }};
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution {public: /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ int depth(TreeNode *root) { if (root == NULL) return 0; return max(depth(root->left), depth(root->right)) + 1; } bool isBalanced(TreeNode *root) { // write your code here if (root == NULL) return true; if (!isBalanced(root->left)) return false; if (!isBalanced(root->right)) return false; int left = depth(root->left); int right = depth(root->right); if (abs(left-right) > 1) return false; return true; }};
代码3
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */class Solution {public: /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ bool balance(TreeNode *root, int &depth) { if (root == NULL) { depth = 0; return true; } int left, right; if (balance(root->left, left) && balance(root->right, right)) { if (abs(left - right) <= 1) { depth = max(left, right) + 1; return true; } } return false; } bool isBalanced(TreeNode *root) { // write your code here int depth = 0; return balance(root, depth); }};
0 0
- lintcode balanced-binary-tree 平衡二叉树
- Balanced Binary Tree 二叉平衡树
- 【LeetCode】Balanced Binary Tree,平衡二叉树
- [LeetCode] Balanced Binary Tree 平衡二叉树
- Leetcode Balanced Binary Tree 平衡二叉树
- 平衡二叉树---Balanced Binary Tree
- Balanced Binary Tree(平衡二叉树)
- AVL树(平衡二叉树(Balanced Binary Tree))
- Balanced Binary Tree 判断是否平衡二叉树 @LeetCode
- 平衡二叉树判定 AVL Balanced Binary Tree
- Balanced Binary Tree 平衡二叉树的检验
- Balanced Binary Tree --判断平衡二叉树(重重)
- LeetCode | Balanced Binary Tree(平衡二叉树)
- Balanced Binary Tree 平衡二叉树的判断
- leetcode Balanced Binary Tree 平衡二叉树判定
- LeetCode 110 Balanced Binary Tree(平衡二叉树)(*)
- leetcode 110. Balanced Binary Tree-平衡二叉树|深度遍历
- LeetCode 110. Balanced Binary Tree(平衡二叉树)
- MongoDB 3.2.7安装及用户角色配置
- TCP连接复用
- 汤晓鸥:百度并没有“作弊” 吴韧工作令人钦佩
- 联想G40 U盘装系统问题解决
- 使用两个栈实现一个队列
- lintcode balanced-binary-tree 平衡二叉树
- Maven+SpringMVC3+MyBatis+FreeMarker
- android基础(四)
- Java自然排序(个人总结-求赞)
- Eclipse 安装 activiti 插件 失败 An error occurred while collecting items to be installed
- mongoDB学习笔记 索引
- 微信内嵌浏览器sessionid丢失问题
- iOS开发零基础教程之证书、描述文件、App ID的解释
- OpenCV2.4.13+VS2012开发环境配置