二叉树的基本操作(c语言)

二叉树的基本遍历方法

创建二叉树

代码:

// 创建二叉树,使用#
void createBiTree(BiTree& T) { //引用是为了连根节点也更改了
	char ch;
	scanf_s("%c", &ch,1);
	if (ch == '#')  // #代表虚拟节点
		T = NULL; //节点直接置为空
	else {
		T = (BiTNode*)malloc(sizeof(BiTNode));
		T->data = ch ;
		createBiTree(T->left);
		createBiTree(T->right);
	}
}

二叉树的叶子节点

递归模型:
f ( b ) = { 0 b = = N U L L 1 b − > l e f t = = N U L L 且 b − > r i g h t = N U L L f ( b − > l e f t ) + f ( b − > r i g h t ) 其 余 情 况 f(b) = \begin{cases} 0 & b == NULL \\ 1 & b->left ==NULL且 b->right = NULL \\ f(b->left)+f(b->right) & 其余情况\\ \end{cases} f(b)=01f(b>left)+f(b>right)b==NULLb>left==NULLb>right=NULL

分析:

当二叉树为空时,叶子结点数为0;当只有一个根节点时,叶子结点数为1;其余情况,叶子节点数 = 左子树叶子节点数 + 右子树叶子节点数

代码:

/*计算一颗二叉树中叶子节点的数量*/
int countleaf(BiTree T) {
	if (T == NULL)
		return 0;
	else if (T->left == NULL && T->right == NULL)
		return 1;
	else
		return countleaf(T->left) + countleaf(T->right);
}

二叉树的节点总数

递归模型:
f ( b ) = { 0 b = = N U L L 1 b − > l e f t = = N U L L 且 b − > r i g h t = N U L L f ( b − > l e f t ) + f ( b − > r i g h t ) + 1 其 余 情 况 f(b) = \begin{cases} 0 & b == NULL \\ 1 & b->left ==NULL且 b->right = NULL \\ f(b->left)+f(b->right) + 1 & 其余情况\\ \end{cases} f(b)=01f(b>left)+f(b>right)+1b==NULLb>left==NULLb>right=NULL
分析

当二叉树为空时,结点数为0;当只有一个根节点时,结点数为1;其余情况,节点总数 = 左子节点总数 + 右子树节点总数+1

代码:

/*计算二叉树的节点个数*/
int NodeCount(BiTree T) {
	int num1, num2;
	if (!T)
		return 0;
	else if (!T->left && !T->right)
		return 1;
	else {
		/*num1 = NodeCount(T->left);
		num2 = NodeCount(T->right);
		return (num1 + num2 + 1);*/
		return (NodeCount(T->left) + NodeCount(T->right) + 1);
	}
}

二叉树的高度

分析

当二叉树为空时,T的深度为0;如果二叉树不为空,则分别计算其左、右子树深度,左右子树的最大深度加1就是该二叉树的深度
代码:

/*计算二叉树的深度*/
int hight(BiTree T) {
	int n1, n2;
	if (!T)
		return 0;
	else {
		n1 = hight(T->left);
		n2 = hight(T->right);
		return (n1 >= n2 ? n1 : n2) +1; //左右子树最大值加1
	}
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值