(015)实现一个函数来检查是否平衡树(keep it up)

实现一个函数来检查是否平衡树。这个问题而言。 平衡指的是这棵树随意两个叶子结点到根结点的距离之差不大于1。

这个题我们能够採用暴力搜索,找到叶子节点到根节点的最小值和最大值。然后他们的差假设大于1就不是平衡树,反之

则是平衡树。

int MinDepth = std::numeric_limits<int>::max();
int MaxDepth = std::numeric_limits<int>::min();

struct TreeNode
{
	int data;
	TreeNode* child;
	TreeNode* brother;
};

bool isBlanceTree(const TreeNode* vNode, int vDepth=0)
{
	if (vNode == NULL)
	{
		if (vDepth == 0) return true;

		if (vDepth < MinDepth)
		{
			MinDepth = vDepth;
		}

		if (vDepth > MaxDepth)
		{
			MaxDepth = vDepth;
		}

		if (MaxDepth - MinDepth > 1) return false;
		return true;
	}

	bool IsBlance = true;
	if (vNode->child != NULL)
	{
		IsBlance = isBlanceTree(vNode->child, vDepth+1);
	}

	if (IsBlance && vNode->brother != NULL)
	{
		IsBlance = isBlanceTree(vNode->brother, vDepth);
	}

	return IsBlance;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-12 20:27:06

(015)实现一个函数来检查是否平衡树(keep it up)的相关文章

(015)实现一个函数检查一棵树是否平衡(keep it up)

实现一个函数检查一棵树是否平衡.对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1. 这个题我们可以采用暴力搜索,找到叶子节点到根节点的最小值和最大值,然后他们的差如果大于1就不是平衡树,反之 则是平衡树. int MinDepth = std::numeric_limits<int>::max(); int MaxDepth = std::numeric_limits<int>::min(); struct TreeNode { int data; T

【C语言】建立动态数组,输入五个学生的成绩,另外用一个函数检查有无60分以下的,输出不合格成绩

//建立动态数组,输入五个学生的成绩,另外用一个函数检查有无60分以下的,输出不合格成绩 #include <stdio.h> void check(int *p) { int i; printf("不合格的有: "); for(i=0;i<5;i++) { if(p[i]<60) printf("%d ",p[i]); } printf("\n"); } int main() { int *p,i; p=(int *)m

你相信么,只需一个函数5行JS代码即可在Javascript中实现完整的AOP功能

你相信么,只需一个函数5行JS代码即可在Javascript中实现完整的AOP功能, 你相信么,在JavaScript只需一个函数5行代码即可实现完整的面向方面AOP编程功能.这5行代码的功能包括: 无限层次的函数无害拦截 函数执行前拦截 检查函数的参数值 重新设定函数的参数值 函数执行后拦截 检查函数执行后的返回结果 重新设定函数的返回结果 虽然动态函数式语言的效率是一个存在的问题,但是对于它的高度灵活性,简直让人令人惊叹不已,剧赞. 这个小小的函数源自于和爱明兄的一次讨论:在javascri

记一个函数:sprintf

问题描述 从键盘输入一个数字,输出所有的形如ABC*DE的一个算式,且满足ABCDE里面的所有数字都在我们输入的数字集合中. 在这个算式中,每行数字都属于2357中的一个数字. Algorithm 如果是在以前,我肯定会这么做: 首先枚举这两个数ABC和DE,然后判断他们算式相乘的两个数以及结果,不断模10来判断是否每一个数字都属于输入的数字. 但是我发现了一个很厉害的函数:sprintf 简单来说,sprintf可以将数字储存到一个字符串里面. 此外,还有另一个函数:strchr 它的作用是检

day14 带函数的装饰器、多个装饰器装饰一个函数

一.带参数的装饰器:------开关 __author__ = 'Administrator' F=True def outer(F): def wap(fun):#gg def inner(*args,**kwargs): if F: print("inner before") ret=fun(*args,**kwargs)#gg() print("inner after") else: ret=fun(*args,**kwargs) return ret ret

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + &q

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

js Array的一个函数indexOf( )

js Array的一个函数:indexOf(i) var  a = [1,2,3,4]; a.indexOf(2) 返回-1则表示2不在a中,反之则2为a的一个元素 此方法可以用来删除掉Array中的重复元素

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var