计算二叉树的高度

计算二叉树的高度

沿每个节点v到根r的唯一通路上节点数目,称作v 的深度(depth),记作depth(v)。

依据深度排序,可对所有节点做分层归类。特别地,约定根节点的深度 depth(root) = 1,

故属于第1层。

树T中所有节点深度的最大值称作该树的高度(height),记作height(T)。空树的高度为0。

下面这棵二叉树的高度为3。

我们可以递归的计算出左子树的高度和右子树的高度,然后取二者的最大值加1最为这棵二叉树的高度。

Algorithm:

height(T)

1. 如果树为空,则返回0

2. 否则

(a) 通过递归地调用height(T.left)求出左子树的高度

(b) 通过递归的调用height(T.right)求出右子树的高度

(c) 利用如下公式求出二叉树的高度:

height(T) = max(height(T.left), height(T.right)) + 1

(d) 返回height(T)下图诠释了递归求解过程:

height('1') = max(height('2'), height('3')) + 1

= 2 + 1

/ \

/ \

/ \

/ \

/ \

height('2') = 1 height('3') = 1

= max(height('4'), height('5')) + 1

= 1 + 1 = 2

/ \

/ \

/ \

/ \

/ \

height('4') = 1 height('5') = 1

#include

#include

/* * 二叉树节点包含数据域,指向左子树的指针,指向右子树的指针 */

struct node

{

int data;

struct node* left;

struct node* right;

};

/* * 计算二叉树的高度 */

int height(struct node* node) {

if (node==NULL)

return 0;

else

{

// 计算左子树的高度和右子树的高度

int lHeight = height(node->left); int rHeight = height(node->right); // 返回二者较大者加1

if (lHeight > rHeight)

return(lHeight+1);

else return(rHeight+1);

}

}

/* * 辅助函数 * 使用给定的数据生成二叉树节点,节点的左子树和右子树均为空 */

struct node* newNode(int data)

{

struct node* node = (struct node*)

malloc(sizeof(struct node));

node->data = data;

node->left = NULL;

node->right = NULL;

return(node);

}

int main()

{

struct node *root = newNode(1);

root->left = newNode(2);

root->right = newNode(3);

root->left->left = newNode(4);

root->left->right = newNode(5);

printf("Height of tree is %d", height(root));

getchar();

return 0;

}

相关推荐

《怪物猎人世界》皇后剑冥灯稳定配装推荐
mobile365体育投注备用

《怪物猎人世界》皇后剑冥灯稳定配装推荐

📅 02-12 👁️ 6192
银行工资流水账单怎么打?详细步骤与常见问题解答
365bet手机娱乐场

银行工资流水账单怎么打?详细步骤与常见问题解答

📅 10-21 👁️ 8367
万物皆可共享?武汉共享系列大集合!全部体验过算你牛!
nba365直播现场视频直播

万物皆可共享?武汉共享系列大集合!全部体验过算你牛!

📅 08-19 👁️ 5382