Balanced Binary Tree
来源:互联网 发布:excel怎么汇总数据 编辑:程序博客网 时间:2024/06/14 08:13
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.
样例
Given binary tree A={3,9,20,#,#,15,7}
, B={3,#,20,15,7}
A) 3 B) 3 / \ \ 9 20 20 / \ / \ 15 7 15 7
The binary tree A is a height-balanced binary tree, but B is not.
思路:
看了网上的解法,好多的递归算法,时间复杂度应该为O(n),Depth first Search 空间上会比下面的算法节省,但是,要考虑JVM的栈溢出问题了。
总结下,递归算法,考虑问题简洁明了,但是也存在两个问题,一是 递归栈溢出问题,二是,存在迭代计算问题,本例中为树,迭代为单项计算,所以不存在重复计算问题,但是如果是图,那么迭代的问题要慎重考虑了。
转换思路,a.将要递归的数据放到数据集合 b.使用map存储所有计算结果供以后计算用,时间复杂度O(2*n)
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */public class Solution { /** * @param root: The root of binary tree. * @return: True if this Binary tree is Balanced, or false. */ public boolean isBalanced(TreeNode root) {if (root == null)return true;Queue<TreeNode> q = new LinkedList<TreeNode>();Stack<TreeNode> s = new Stack<TreeNode>();q.offer(root);s.push(root);while (!q.isEmpty()) {TreeNode f = q.poll();TreeNode l = f.left;TreeNode r = f.right;if (l != null) {q.offer(l);s.push(l);}if (r != null) {q.offer(r);s.push(r);}}Map<Integer, Integer> map = new HashMap<Integer, Integer>();while (!s.isEmpty()) {TreeNode c = s.pop();int l = 0;if(c.left!=null && map.get(c.left.val) != null) l = map.get(c.left.val);int r = 0;if(c.right!=null && map.get(c.right.val) != null) r = map.get(c.right.val);if ((l - r) * (l - r) > 1)return false;map.put(c.val, l > r ? l + 1 : r + 1);}return true;}}
0 0
- Balanced binary tree 扩展
- LeetCode: Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [Leetcode] Balanced Binary Tree
- LeetCode : Balanced Binary Tree
- LeetCode Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- Balanced Binary Tree
- Balanced Binary Tree
- 【leetcode】Balanced Binary Tree
- Balanced Binary Tree
- [LeetCode]Balanced Binary Tree
- Balanced Binary Tree
- Balanced Binary Tree
- [LeetCode] Balanced Binary Tree
- [Leetcode]Balanced Binary Tree
- [leetcode]Balanced Binary Tree
- QTP中经常使用的VB语句
- MVC的URL路由规则
- xcode 各种配置设置
- 给linux添加系统调用——从源头说起
- 控制actionbar中的向上键
- Balanced Binary Tree
- 查询本机的某个端口被什么程序或者进程占用
- 磁盘I/O性能影响
- 浅谈企业应用软件架构设计过程
- kmp中next数组的运用
- HDOJ 2046 骨牌铺方格
- JavaScript Promises
- ffmpeg代码笔记4:获取MP4文件的码率
- DialogFragment详解