二叉树经典14题——初学二叉树必会的简单题

这篇具有很好参考价值的文章主要介绍了二叉树经典14题——初学二叉树必会的简单题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二叉树初赛题,新星计划免费学习专栏·数据结构与算法,刷题训练营,c++,算法,数据结构,二叉树

 

此篇皆为leetcode、牛客中的简单题型和二叉树基础操作,无需做过多讲解,仅付最优解。有需要的小伙伴直接私信我~

目录

1.二叉树的节点个数

2.二叉树叶子节点个数

3.二叉树第K层节点个数

4.查找值为X的节点

5.leetcode——二叉树的最大深度

6.leetcode——单值二叉树

7.leetcode——相同的树

8.二叉树的前序遍历

9.二叉树的中序遍历 

10.二叉树的后序遍历 

11.二叉树的层序遍历

12.leetcode——另一棵树的子树

13.二叉树的构建及遍历 

14.leetcode——对称二叉树


1.二叉树的节点个数

int BinaryTreeSize(BTNode* root)
{
	return root == NULL ? 0 : 
           BinaryTreeSize(root->left) + 
           BinaryTreeSize(root->right) + 1;
}

2.二叉树叶子节点个数

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

3.二叉树第K层节点个数

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

4.查找值为X的节点

BTNode* BinaryTreeFind(BTNode* root, BTDataType data)
{
	if (root == NULL)
		return NULL;
	if (root->data == data)
		return root;

	BTNode* ret1 = BinaryTreeFind(root->left, data);
	if (ret1)
		return ret1;
	BTNode* ret2 = BinaryTreeFind(root->right, data);
	if (ret2)
		return ret2;
	return NULL;
}

5.leetcode——二叉树的最大深度

oj链接:二叉树的最大深度

int maxDepth(struct TreeNode* root) {
	if (root == NULL)
		return 0;

	int leftDepth = maxDepth(root->left);
	int rightDepth = maxDepth(root->right);

	return  (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}

6.leetcode——单值二叉树

oj链接:单值二叉树

bool isUnivalTree(struct TreeNode* root)
{
	if (root == NULL)
	{
		return true;
	}
	if (root->left && root->val != root->left->val)
		return false;
	if (root->right && root->val != root->right->val)
		return false;
	return isUnivalTree(root->left) && isUnivalTree(root->right);
}

7.leetcode——相同的树

oj链接:相同的树

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
	if (p == NULL && q == NULL)
		return true;
	if (p == NULL || q == NULL)
		return false;
	if (p->val != q->val)
	{
		return false;
	}
	return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}

8.二叉树的前序遍历

详细讲解:二叉树的前、中、后序遍历

void PrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	printf("%d ", root->data);//前序在前
	PrevOrder(root->left);
	PrevOrder(root->right);
}

9.二叉树的中序遍历 

void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	InOrder(root->left);
	printf("%d ", root->data);//中序在中
	InOrder(root->right);
}

10.二叉树的后序遍历 

void PostOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	PostOrder(root->left);
	PostOrder(root->right);
	printf("%d ", root->data);//后序在后
}

11.二叉树的层序遍历

详细讲解:看完这篇我不信你不会二叉树的层序遍历

//需自己实现队列的数据结构
void BinaryTreeLevelOrder(BTNode* root)
{
	Queue q;
	QueueInit(&q);

	if (root)
		QueuePush(&q, root);
	else
		return;

	while (!QueueEmpty(&q))
	{
		BTNode* front = QueueFront(&q);
		printf("%d ", front->data);
		
		QueuePop(&q);

		if(front->left)
			QueuePush(&q, front->left);
		if(front->right)
			QueuePush(&q, front->right);
	}

	printf("\n");
	QueueDestroy(&q);
}

12.leetcode——另一棵树的子树

oj链接:另一棵树的子树

//判断两树是否相同(复用“相同的树”解题代码)
bool isSametree(struct TreeNode* p,struct TreeNode* q)
{
    if(p==NULL && q==NULL)
        return true;
    if(p==NULL || q==NULL)
        return false;
        
    if(p->val != q->val)
        return false;

    return isSametree(p->left,q->left) && isSametree(p->right,q->right);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    
    if(isSametree(root,subRoot))
        return true;

    return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}

13.二叉树的构建及遍历 

题目链接:二叉树的遍历

注意:本题虽然是二叉树的遍历,但考查的却是如何通过数组的内容构建一棵二叉树。

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

struct TreeNode {
    int val;
     struct TreeNode *left;
     struct TreeNode *right;
 };

struct TreeNode* rebuildTree(char* str,int* pi)
{
    if(str[*pi] == '#')
    {
        (*pi)++;
        return NULL;
    }
    struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));


    root->val = str[(*pi)++];
    root->left = rebuildTree(str,pi);
    root->right = rebuildTree(str,pi);

    return root;
}

void TreeDestory(struct TreeNode* root)
{
    if(root==NULL)
        return;
    
    TreeDestory(root->left);
    TreeDestory(root->right);

    free(root);
}

void InOrder(struct TreeNode* root)
{
	if (root == NULL)
	{
		return;
	}

	InOrder(root->left);
	printf("%c ", root->val);
	InOrder(root->right);
}
int main() {
    char str[100];
    scanf("%s",str);
    int i=0;
    struct TreeNode* root = rebuildTree(str,&i);
    InOrder(root);
    TreeDestory(root);
    return 0;
}

14.leetcode——对称二叉树

oj链接:对称二叉树文章来源地址https://www.toymoban.com/news/detail-790953.html

bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)
{
	if (p == NULL && q == NULL)
		return true;
	if (p == NULL || q == NULL)
		return false;
	if (p->val != q->val)
		return false;

	return _isSymmetric(p->left, q->right) &&
		_isSymmetric(p->right, q->left);
}
bool isSymmetric(struct TreeNode* root) {
	return root == NULL ? 0 : _isSymmetric(root->left, root->right);
}

到了这里,关于二叉树经典14题——初学二叉树必会的简单题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二叉树经典算法题目

    省略 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7] , 返回它的最大深度 3 。 思路:递归,当前数的深度等于左子数和右子树其中最大深

    2024年02月09日
    浏览(55)
  • 二叉树经典题题解

    目录 🍅1.单值二叉树🍅 🍉 2.相同的树🍉 🍊3.对称二叉树🍊 🍎4.另一颗树的子树🍎 🍏5.翻转二叉树🍏  🍑6.平衡二叉树🍑 题目OJ链接  力扣 题目描述: 思路: 采用递归的思想,判断当前节点是否与左右孩子相等,不相等则返回false,相等则继续递归左右子树进行判断

    2023年04月22日
    浏览(39)
  • 【数据结构】二叉树经典题目

    相信大部分人看了题目描述之后,都会和我一样一脸的懵逼。直到我看到了一个描述才恍然大悟 分为3种情况: 左右都为空 --省略 右为空,左不为空 – 省略 左为空,右不为空–不省略 这里复习一下二叉树的前序遍历、中序遍历、和后序遍历 前序的结果是:ABDEGCF 中序的结

    2024年02月10日
    浏览(53)
  • 数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第一弹)

    朋友们、伙计们,我们又见面了,本期来给大家解读一下有关二叉树的经典例题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 目录 前言: 一、 二、

    2024年02月10日
    浏览(36)
  • 数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第二弹)

     朋友们、伙计们,我们又见面了,本期来给大家解读一下有关二叉树的经典例题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏: C语言:从入门到精通 数据结构专栏: 数据结构 个  人  主  页 : stackY、 ​ 目录   前言: 一、

    2024年02月10日
    浏览(85)
  • Java LeetCode篇-深入了解二叉树的经典解法(多种方式实现:构造二叉树)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍     文章目录         1.0 从前序与中序遍历序列来构造二叉树         1.1 实现从前序与中序遍历序列来构造二叉树思路            1.2 代码实现从前序与中序遍历序列来构造二叉树         2.0 从中序

    2024年02月05日
    浏览(75)
  • 算法D14 | 二叉树1 | 144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历

    理论基础  需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义  文章讲解: 二叉树既可以链式存储(利用指针,类似栈和队列),也可以用数组表示。 深度优先遍历 前序遍历(递归法,迭代法) 中序遍历(递归法,迭代法) 后序遍历(递归法,迭代法)

    2024年02月20日
    浏览(38)
  • 【数据结构(八)上】二叉树经典习题

    ❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵 关注我带你学更多数据结构的知识 在上一篇文章中,博主主要介绍了树与二叉树的基本概念、二叉树概念及特性、遍历方式自己实现一棵二叉树,在这篇文章中,博主将

    2024年04月22日
    浏览(35)
  • 【数据结构(八)下】二叉树经典习题

    ❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵 关注我带你学更多数据结构的知识 在上一篇文章中,博主已经分享了部分二叉树的经典习题,在这篇文章中,博主将继续和大家分享二叉树的经典习题。 给定一个二叉树

    2024年04月27日
    浏览(33)
  • 二叉树经典题题解(超全题目)(力扣)

        ✨欢迎来到脑子不好的小菜鸟的文章✨       🎈创作不易,麻烦点点赞哦🎈           所属专栏:刷题             我的主页:脑子不好的小菜鸟           文章特点:关键点和步骤讲解放在           代码相应位置 目录 144. 二叉树的前序遍历 145. 二叉树的后序遍

    2024年04月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包