C语言求二叉树的高度

利用后续遍历,递归实现

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

typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );

int main()
{
    BinTree BT = CreatBinTree();
    printf("%d\n", GetHeight(BT));
    return 0;
}

int GetHeight(BinTree BT)
{
	int hl, hr, max;
	if (BT != NULL)
	{
		hl = GetHeight(BT->Left);
		hr = GetHeight(BT->Right);
		max = hl > hr ? hl : hr;
		return (max + 1);

	}
	else
		return 0;
}

 

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言代码如下: ```c #include <stdio.h> #include <stdlib.h> typedef struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; } TreeNode; int tree_height(TreeNode* root) { if (!root) { return 0; } int left_height = tree_height(root->left); int right_height = tree_height(root->right); return (left_height > right_height ? left_height : right_height) + 1; } int main() { // 创建一棵二叉树 TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = 1; root->left = (TreeNode*)malloc(sizeof(TreeNode)); root->left->val = 2; root->left->left = NULL; root->left->right = NULL; root->right = (TreeNode*)malloc(sizeof(TreeNode)); root->right->val = 3; root->right->left = (TreeNode*)malloc(sizeof(TreeNode)); root->right->left->val = 4; root->right->left->left = NULL; root->right->left->right = NULL; root->right->right = (TreeNode*)malloc(sizeof(TreeNode)); root->right->right->val = 5; root->right->right->left = NULL; root->right->right->right = NULL; // 计算二叉树高度 int height = tree_height(root); printf("二叉树高度为:%d\n", height); return 0; } ``` 在这个程序中,我们定义了一个`TreeNode`结构体表示二叉树节点,其中包含`val`表示节点的值,`left`和`right`分别表示左右子树指针。接着,我们定义了一个`tree_height`函数用于递归计算二叉树高度。在函数中,先判断当前节点是否为空,如果为空,则返回0;否则,分别递归解左子树和右子树的高度,最后返回左右子树高度的较大值加1。 在`main`函数中,我们创建了一棵二叉树,并调用`tree_height`函数计算它的高度。最后,程序输出二叉树高度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值