二叉平衡树
来源:互联网 发布:算法设计与分析第二版 编辑:程序博客网 时间:2024/06/09 22:37
分治,递归。
这道题有两种好方法。
- 方法1:先有一个求深度depth的函数,然后递归比较各个节点的depth之差,返回结果。
C++代码:
class Solution { public: /** * @param root: The root of binary tree. * @return: An integer */ int maxPathSum(TreeNode *root) { // write your code here int ret = INT_MIN; onePath(root,ret); return ret; } int onePath(TreeNode* root,int&ret) { if(root==nullptr) return 0; int l = onePath(root->left,ret); int r = onePath(root->right,ret); ret = max(ret,max(0,l)+max(0,r)+root->val); return max(0,max(l,r))+root->val; } };
- 方法2:深度优先搜索根节点,遇到不合格的节点,及时反馈,这样可以迅速得出结果,时间复杂度小。
C++ 代码:
/** * 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) { if (root == NULL) { return true; } if (dfs(root)>0) { return true; } return false; } int dfs(TreeNode * root) { if (root==NULL) { return 0; } int left = dfs(root->left); int right = dfs(root->right); if (left<0 || right<0 || abs(left-right)>1) { return -1; } return max(left,right) + 1; }};
0 0
- 平衡二叉树平衡法则
- 二叉树--二叉平衡树
- 平衡二叉树的
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉查找树
- 平衡二叉树 详解
- 平衡二叉树
- 平衡二叉树
- AVL 平衡二叉树
- 平衡二叉树
- 平衡二叉树-红黑树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- java服务器线程
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能
- 线程及进程间的通信
- opencv:图像变换
- 最大公约数和最小公倍数问题
- 二叉平衡树
- spring cloud-使用Hystrix实现单个方法的fallback
- Spring_20-21,切面的优先级&重用切点表达式
- C语言qsort
- scala --数组相关操作
- 广播的一些基本用法
- opencv:canny边缘检测
- opencv:打开摄像头
- 笔试题12