二叉树基础计算

一共有这么几个题目,主要是用来表现题目的性质
分别是求

二叉树节点个数
二叉树叶子节点个数
二叉树第k 层节点个数
二叉树查找值为x 的节点

如果我使用的还是这个二叉树
在这里插入图片描述
其中 NULL 表示终止

二叉树节点个数

图解过程

总个数 = 根节点个数 + 左子树个数 + 右子树个数

整个过程
在这里插入图片描述
程序实现

int countNode(TreeNode* root)
{
	if(root == NULL)
	{
		return 0;
	}
	return 1+countNode(root->left)+count(root->right);
}

二叉树叶子节点个数

叶子节点,是这个节点之后没有其他节点了

在这里插入图片描述
红圈就是叶子节点
因此只要返回 左右节点都是 NULL 的节点就可以了

程序

int countleaf(TreeNode* root)
{
	if(root == NULL)
	{
		return 0;
	}
	if(root -> left == NULL && root ->right == NULL)
	{
		return 1;
	}
	return countleaf(root->left) + countleaf(root->right);
}

二叉树第k 层节点个数

二叉树能够分层,每一层有对应的个数

在这里插入图片描述

我们可以通过这个方法求解
当层数 > 1 的时候,层数不断向下走,直到层数 = 1,也就是找到本层
将本层的非 NULL 的节点个数进行返回

比如要找第三层,过程如下
在这里插入图片描述

程序

int countk(TreeNode* root , int k )
{
	if(root == NULL)
	{
		return 0;
	}
	if(k==1)
	{
		return 1;
	}
	return countk(root->left)+countk(root->right);
}

二叉树查找值为x 的节点

图解
先看根节点,根节点不是,就要向左子树查找
左子树没有找到,就要向右子树查找
把找到的节点返回

在这里插入图片描述

TreeNode* FindNode(TreeNode* root,int x)
{
	if(root == NULL)
	{
		return NULL;
	}
	if(root->val == x)
	{
		return root;
	}
	TreeNode* left = FindNode(root->left,x);
	TreeNOde* right = FindNode(root->right,x);

	return left == NULL ? right : left;
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值