程序员面试题精选100题(60)-判断二叉树是不是平衡的
2011-07-31 13:24
483 查看
题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:
#include<iostream>
usingnamespacestd;
structBTNode{
BTNode*Left;
BTNode*Right;
intvalue;
BTNode(intval=0)
:value(val){}
};
BTNode*CreateTree(){
intdata;
cin>>data;
BTNode*root;
if(-1==data)
returnNULL;
else{
root=newBTNode(data);
root->Left=CreateTree();
root->Right=CreateTree();
}
returnroot;
}
boolIsBalancedBT(BTNode*pRoot,int*pDepth){
if(!pRoot){
*pDepth=0;
returntrue;
}
intleft,right;
if(IsBalancedBT(pRoot->Left,&left)
&&IsBalancedBT(pRoot->Right,&right)){
intdiff=left-right;
if(diff<=1&&diff>=-1){
*pDepth=1+(left>right?left:right);
returntrue;
}
}
returnfalse;
}
boolIsBalanced(BTNode*root){
intdepth=0;
returnIsBalancedBT(root,&depth);
}
voidprintTree(BTNode*root){
if(!root)return;
printTree(root->Left);
cout<<root->value<<"";
printTree(root->Right);
return;
}
intmain(){
BTNode*root=CreateTree();
printTree(root);
cout<<endl;
if(IsBalanced(root))
cout<<"Thebinarytreeisbalanced!"<<endl;
return0;
}
参考文献:
相关文章推荐
- 程序员面试题精选100题(60)-判断二叉树是不是平衡的
- 程序员面试题精选100题(60)-判断二叉树是不是平衡的
- 程序员面试题精选100题(60)-判断二叉树是不是平衡[数据结构]
- 程序员面试题精选100题(60)-判断二叉树是不是平衡
- 程序员面试题精选100题(60)-判断二叉树是不是平衡
- 程序员面试题精选-- 判断二叉树是不是平衡的
- 程序员面试题精选100题(60)-判断二叉树是不是平衡[数据结构]
- 程序员面试题精选100题(06)-判断整数序列是不是二元查找树的后序遍历结果
- 程序员面试题精选100题(06)-判断整数序列是不是二元查找树的后序遍历结果
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点
- [程序员面试题精选100题]12.从上往下遍历二叉树
- 程序员面试题精选100题(48)-二叉树两个结点的最低共同父结点
- 面试题39:二叉树的深度、判断二叉树是不是平衡
- 程序员面试题精选--06 判断整数序列是不是二元查找树的后序遍历结果
- [程序员面试题精选100题]4.二叉树中和为某一值的所有路径
- 转载:程序员面试题精选100题(49)-复杂链表的复制
- 程序员面试题精选100题(44)-数值的整数次方
- 程序员面试题精选100题(14)-圆圈中最后剩下的数字[算法]
- 程序员面试题精选100题(05)-查找最小的k个元素