LeetCode:Balanced Binary Tree(平衡二叉树的判断)
2016-07-15 11:20
295 查看
LeetCode:Balanced Binary Tree(平衡二叉树的判断)
1、题目: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.
2、代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: //Depth-First Search bool inorder(TreeNode* root,int &height) { if(root) { int hleft=0,hright=0; if(inorder(root->left,hleft)&&inorder(root->right,hright)&&abs(hright-hleft)<=1) { height=max(hleft,hright)+1; } else { return false; } } return true; } bool isBalanced(TreeNode* root) { if(!root) return true; int height=0; return inorder(root,height); } };
3、总结:
从昨天写到今天,总算有点突破,AC了。
A、定义:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。跟题目里面描述的类似。
B、既然是高度相关,那首当其冲应该深度优先搜索。按照遍历类似,应该选择后序遍历。
C、得到左右子树高度,并保证两个子树都是平衡的,算出当前结点的高度max(hleft,hright)+1,别忘记+1!!!
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#非递归先序遍历二叉树实例
- C++将二叉树转为双向链表及判断两个链表是否相交
- C++非递归建立二叉树实例
- C语言实现找出二叉树中某个值的所有路径的方法
- C++实现二叉树遍历序列的求解方法
- C语言实现二叉树遍历的迭代算法
- C语言 二叉树的链式存储实例
- C++实现查找二叉树中和为某一值的所有路径的示例
- 用C语言判断一个二叉树是否为另一个的子结构
- C++实现二叉树非递归遍历方法实例总结
- C++二叉树结构的建立与基本操作
- 深入遍历二叉树的各种操作详解(非递归遍历)