编程算法 - 推断二叉树是不是平衡树 代码(C)

Posted brucemengbm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程算法 - 推断二叉树是不是平衡树 代码(C)相关的知识,希望对你有一定的参考价值。

推断二叉树是不平衡树 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


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


二叉平衡树: 随意结点的左右子树的深度相差不超过1.

使用后序遍历的方式, 而且保存左右子树的深度, 进行比較.


代码:

/*
 * main.cpp
 *
 *  Created on: 2014.6.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct BinaryTreeNode {
	int m_nValue;
	BinaryTreeNode* m_pLeft;
	BinaryTreeNode* m_pRight;
};

bool IsBalanced(BinaryTreeNode* pRoot, int* pDepth) {
	if (pRoot == NULL) {
		*pDepth = 0;
		return true;
	}
	int left, right;
	if (IsBalanced(pRoot->m_pLeft, &left) && IsBalanced(pRoot->m_pRight, &right)) {
		int diff = left - right;
		if (diff>=-1 && diff<=1) {
			*pDepth = 1 + (left>right?left:right);
			return true;
		}
	}
	return false;
}

bool IsBalanced(BinaryTreeNode* pRoot) {
	int depth = 0;
	return IsBalanced(pRoot, &depth);
}

BinaryTreeNode* init(void) {
	BinaryTreeNode* pRoot = new BinaryTreeNode(); pRoot->m_nValue = 1;
	BinaryTreeNode* pNode2 = new BinaryTreeNode(); pNode2->m_nValue = 2;
	BinaryTreeNode* pNode3 = new BinaryTreeNode(); pNode3->m_nValue = 3;
	BinaryTreeNode* pNode4 = new BinaryTreeNode(); pNode4->m_nValue = 4;
	BinaryTreeNode* pNode5 = new BinaryTreeNode(); pNode5->m_nValue = 5;
	BinaryTreeNode* pNode6 = new BinaryTreeNode(); pNode6->m_nValue = 6;
	BinaryTreeNode* pNode7 = new BinaryTreeNode(); pNode7->m_nValue = 7;
	pRoot->m_pLeft = pNode2; pRoot->m_pRight = pNode3;
	pNode2->m_pLeft = pNode4; pNode2->m_pRight = pNode5;
	pNode4->m_pLeft = NULL; pNode4->m_pRight = NULL;
	pNode5->m_pLeft = pNode7; pNode5->m_pRight = NULL;
	pNode7->m_pLeft = NULL; pNode7->m_pRight = NULL;
	pNode3->m_pLeft = NULL; pNode3->m_pRight = pNode6;
	pNode6->m_pLeft = NULL; pNode6->m_pRight = NULL;
	return pRoot;
}

int main(void)
{
	BinaryTreeNode* pRoot = init();
	bool result = IsBalanced(pRoot);
	printf("result = %s\n", result==false?"false":"true");
    return 0;
}

输出:

result = true



技术分享



以上是关于编程算法 - 推断二叉树是不是平衡树 代码(C)的主要内容,如果未能解决你的问题,请参考以下文章

求数据结构算法平衡二叉树实现代码

算法题(二叉树):平衡二叉树

二叉平衡树的实现(c语言编程)

通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!

通宵爆肝:C语言下的平衡二叉树(Avl)原来如此简单!

每日算法平衡二叉树