平衡二叉树判断
2013-10-29 23:15
281 查看
平衡二叉树的定义:(1)必须是二叉树(可以是空树);(2)它的左右子树也应该是平衡二叉树,且左右子树的深度之差的绝对值不能超过1.(即可以为0,1)
以上为节点的结构。题目:现需要设计一个函数来判断给定的二叉树是否为平衡二叉树。【给定二叉树的根节点为R】
(1)依据平衡二叉树的定义来判断,即需要求设计一个求取树深度的函数
(2)直接递归判断方法。[写得风格有点糟糕,但愿思路没错]
struct Node { int data; Node *left; Node *right; };
以上为节点的结构。题目:现需要设计一个函数来判断给定的二叉树是否为平衡二叉树。【给定二叉树的根节点为R】
(1)依据平衡二叉树的定义来判断,即需要求设计一个求取树深度的函数
int Deepth(Node *R) { if(!R) return 0; else { int left_deep = Deepth(R->left); int right_deep = Deepth(R->right); return 1+((left_deep>=right_deep)?left_deep:right_deep); } }
bool IsBiTree(Node *R) { if(!R) return true; int left_deep = Deepth(R->left); int right_deep=Deepth(R->right); if(abs(left_deep - right_deep)>1) return false; else return IsBiTree(R->left)&&IsBiTree(R->Right); }
(2)直接递归判断方法。[写得风格有点糟糕,但愿思路没错]
bool IsBiTree(Node *R) { if(!R) return true; if(R->left==NULL && R->right==NULL) return true; else if(R->left==NULL && R->right->right==NULL) return true; else if(R->right==NULL && R->left->left==NULL)//前三种情况均是平衡二叉树结束的情况 return true; else if(R->left==NULL && R->right->right) return false; else if(R->right==NULL && R->left->left) return false; else return IsBiTree(R->left)&&IsBiTree(R->right); }
相关文章推荐
- 剑指Offer--039-平衡二叉树(判断一棵二叉树是否是平衡二叉树)[扩展附加题]
- 判断二叉树是否平衡二叉树
- 判断是否是平衡二叉树
- 剑指Offer——判断平衡二叉树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 【2】输入一颗二叉树判断是不是平衡二叉树
- 判断是否是平衡二叉树
- 面试题39(2). 判断是否为平衡二叉树
- 平衡二叉树的判断
- leetcode 110. Balanced Binary Tree(平衡二叉树的判断) DFS深度优先遍历
- 判断一棵树是不是平衡二叉树
- Q392判断是否为平衡二叉树(后序遍历实现)
- 计算二叉树的深度+判断二叉树是否是平衡二叉树
- 判断二叉树是否为平衡二叉树(BST)
- 判断一个二叉树是不是平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断二叉树是否是平衡二叉树
- leetcode 110. Balanced Binary Tree 判断是否是一颗平衡二叉树
- 测试:判断一棵树是否是平衡二叉树
- 每日编程16之判断数是否为平衡二叉树