判断二叉树是不是平衡

题目来自http://zhedahht.blog.163.com/blog/#m=0

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:

判断二叉树是不是平衡_第1张图片



递归算法,考虑根节点是否平衡,考虑根节点的左子树是否平衡,考虑根节点的右子树是否平衡。

case1:根节点为空,返回true

case2:若根节点左子树右子树均为空,返回true

case3:根节点左子树为空右子树不为空,若右子树无子节点返回true,若右子树有子节点,返回false

case4根节点左子树不为空右子树为空与case3类似



#include<iostream>
using namespace std;
struct node{
	int value;
	node *left;
	node *right;
	node(int v):value(v),left(NULL),right(NULL){}

};
bool isBalanced(node *p){
	bool res=true;
	if(p==NULL)return true;
	if(!p->left&&!p->right)//left and right tree both are NULL
		return true;
	if(!p->left&&p->right){  //left tree is NULL,right tree is not NULL
		if(!p->right->left&&!p->right->right)//right tree has no child
			return true;
		if(p->right->left||p->right->right)//right tree has child
			return false;
	}
	if(!p->right&&p->left){//right tree is NULL,left tree is not NULL
		if(!p->left->left&&!p->left->right)//left tree has no child
			return true;
		if(p->left->left||p->left->right)//left tree has child
			return false;
	}
	res=isBalanced(p->left)&&isBalanced(p->right);
	return res;

}

int main(){
	node p1(5);
	node p2(6);
	node p3(5);
	node p4(5);
	node p5(5);
	node p6(5);
	node p7(5);
	p1.left=&p2;
	p1.right=&p3;
	p2.left=&p4;
	p4.right=&p5;
	p3.left=&p6;
	p5.right=&p7;
	cout<<isBalanced(&p1);


}


你可能感兴趣的:(递归,二叉树,tree,binary)