关闭

判断二叉树是不是平衡二叉树

标签: 二叉树
668人阅读 评论(0) 收藏 举报
分类:

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



// IsbalenceTree.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<algorithm>
using namespace std;

struct BiNOde
{
	char ele;
	BiNOde* lnode;
	BiNOde* rnode;
};

BiNOde*create_tree()
{
	BiNOde * root = new BiNOde;
	BiNOde*node1 = new BiNOde;
	BiNOde*node2 = new BiNOde;
	BiNOde*node3 = new BiNOde;
	BiNOde*node4 = new BiNOde;
	BiNOde*node5 = new BiNOde;
	BiNOde*node6 = new BiNOde;
	BiNOde*node7 = new BiNOde;
	BiNOde*node8 = new BiNOde;
	BiNOde*node9 = new BiNOde;
	BiNOde*node10 = new BiNOde;
	BiNOde*node11 = new BiNOde;
	root->ele = 0;
	node1->ele = 1;
	node2->ele = 2;
	node3->ele = 3;
	node4->ele = 4;
	node5->ele = 5;
	node6->ele = 6;
	node7->ele = 7;
	node8->ele = 8;
	node9->ele = 9;
	node10->ele = 10;
	node11->ele = 11;
	root->lnode = node1;
	root->rnode = node2;
	node1->lnode = node3;
	node1->rnode = node4;
	node2->lnode = node7;
	node2->rnode = node8;
	node3->lnode = node5;
	node3->rnode = node11;
	node4->lnode = node10;
	node4->rnode = NULL;
	node5->lnode = node6;
	node5->rnode = NULL;
	node6->lnode = NULL;
	node6->rnode = NULL;
	node7->lnode = node9;
	node7->rnode = NULL;
	node8->lnode = NULL;
	node8->rnode = NULL;
	node9->lnode = NULL;
	node9->rnode = NULL;
	node10->lnode = NULL;
	node10->rnode = NULL;
	node11->lnode = NULL;
	node11->rnode = NULL;
	//BiNOde*node12 = new BiNOde;
	//node12->ele = 12;
	//node12->lnode = NULL;
	//node12->rnode = NULL;
	//node6->lnode = node11;
	return root;
}

int depth(BiNOde*node)
{

	if (node == NULL || node->lnode == NULL&&node->rnode == NULL)
		return 0;
	if (node->lnode != NULL)
		if (node->rnode != NULL)
		{
		if ((node->lnode->lnode == NULL&&node->lnode->rnode == NULL
			&&node->rnode->lnode == NULL&&node->rnode->rnode == NULL))
			return 1;
		}
		else
		{
			if ((node->lnode->lnode == NULL&&node->lnode->rnode == NULL))
				return 1;
		}
	else
		if (node->rnode != NULL)
		{
		if (node->rnode->lnode == NULL&&node->rnode->rnode == NULL)
			return 1;
		}
	return 1 + max(depth(node->lnode), depth(node->rnode));

}


bool IsbalenceTree(BiNOde* node)
{
	if (node->lnode == NULL&&node->rnode == NULL)
		return true;
	if (node->lnode == NULL)
	{
		if (node->rnode->lnode != NULL || node->rnode->rnode != NULL)
			return false;
		return true;
	}
	if (node->rnode == NULL)
	{
		if (node->lnode->lnode != NULL || node->lnode->rnode != NULL)
			return false;
		return true;
	}
	if (abs(depth(node->lnode) - depth(node->rnode)) > 1)
		return false;
	return IsbalenceTree(node->lnode) && IsbalenceTree(node->rnode);

}


int _tmain(int argc, _TCHAR* argv[])
{
	//char b = 0;
	//cout << b << endl;
	BiNOde*root = new BiNOde;
	root = create_tree();

	cout << depth(root) << endl;
	if (IsbalenceTree(root))
		cout << "是平衡二叉树" << endl;
	else
		cout << "不是平衡二叉树" << endl;
	system("pause");
	return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

剑指offer:判断二叉树是不是平衡二叉树(java)

题目:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。     有了求二叉树的深度的经验之后再解决这个问题,我们很容易...
  • abc7845129630
  • abc7845129630
  • 2016-10-06 18:48
  • 3528

Java判断二叉树是否为平衡二叉树

输入一棵二叉树,判断该二叉树是否是平衡二叉树
  • u014282557
  • u014282557
  • 2017-06-06 15:25
  • 1379

【2】输入一颗二叉树判断是不是平衡二叉树

题目:输入一颗二叉树的根结点,判断该二叉树是不是平衡二叉树。平衡二叉树是满足所有结点的左右子树的高度差不超过1的二叉树 方案一:遍历数组的每一个结点,对每一个结点求它的左右子树的高度并进行判断。时...
  • cgl1079743846
  • cgl1079743846
  • 2014-05-23 21:08
  • 2381

【Java】检查二叉树是否平衡。

实现一个函数,检查二叉树是否平衡。 二叉树平衡的定义如下:任意一个结点,其两颗子树的高度差不超过1 递归访问每个整棵树,计算每个结点子树的高度 public class BTreeBalance...
  • michellechouu
  • michellechouu
  • 2015-07-14 10:10
  • 2339

面试题——判断一棵树是否是平衡二叉树

bool IsBlance() { return _IsBlance(_root); } protected: bool _IsBlance(Node* root) { if (roo...
  • poison_biti
  • poison_biti
  • 2016-10-25 16:26
  • 757

AVL树详解&面试题-判断一棵树是否是平衡二叉树

上次写了关于二叉搜索树的分析,但是二叉搜索树有一个缺陷,就是当插入一个有序(或接近有序)的序列时,二叉搜索树就相当于一个链表了,搜索效率会特别低。那么,如何来改进呢?这就引入了AVL树(高度平衡二叉树...
  • her__0_0
  • her__0_0
  • 2017-06-24 22:57
  • 1052

平衡搜索二叉树的python实现

我的代码片:https://code.csdn.net/snippets_manage# BST为二叉搜索树的实现文件 import BST''' 功能:往平衡二叉树中插入一个结点 参...
  • lym152898
  • lym152898
  • 2016-07-25 10:22
  • 1308

C++ 判断一棵二叉树是否对称

一棵二叉树对称,就是说它如果以根为轴,翻转过去一样,如下图所示,以虚线为轴,把左边翻转到右边,各顶点及顶点中的值均一一对应。
  • OrthocenterChocolate
  • OrthocenterChocolate
  • 2014-07-01 12:01
  • 2391

[从头学数学] 第243节 关于平衡二叉树的Python实现

剧情提要: 阿伟看到了一本比较有趣的书,是关于《计算几何》的,2008年由北清派出版。很好奇 它里面讲了些什么,就来看看啦。 正剧开始: 星历2016年07月23日 16:30:59,...
  • mwsister
  • mwsister
  • 2016-07-23 16:41
  • 1319

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如,下图中的二叉树就是一棵平衡二叉树。   解题思路: (1)需...
  • yanxiaolx
  • yanxiaolx
  • 2016-08-23 17:05
  • 1491
    个人资料
    • 访问:592071次
    • 积分:10201
    • 等级:
    • 排名:第1966名
    • 原创:466篇
    • 转载:61篇
    • 译文:0篇
    • 评论:63条
    最新评论