二叉树经典14题——初学二叉树必会的简单题
创始人
2024-05-31 03:56:07
0

此篇皆为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);elsereturn;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 
#include 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链接:对称二叉树

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);
}

相关内容

热门资讯

fedora9 安装-安装 F... 哎呀,说到安装Fedora9,这可真是个让人又爱又恨的小妖精!想象一下,你坐在电脑前,手里握着那张闪...
linux模拟器 window... 哎呀,说到在Windows上搞个Linux模拟器,我这心情真是激动得不行!你知道吗,有时候我就想在W...
switch支持破解序列号-S... 哎呀,今天咱们聊聊这个挺刺激的话题——Switch支持破解序列号。首先啊,我得说,这事儿可不是闹着玩...
电脑windows升级-电脑升... 哎,说到这个电脑升级,真的是让人又爱又恨呐!每次Windows一蹦出来那个升级提示,心里就嘀咕:“又...
电脑盘符不见了-电脑盘符消失怎... 天哪,今天打开电脑一看,怎么回事?我的D盘、E盘,还有那个存满美好回忆的F盘,都跑哪儿去了?这电脑是...
恢复丢失的分区-丢失的硬盘分区... 哎呀,真是吓死我了!那天,我一不小心,竟然把我的硬盘分区给弄丢了!你知道的,那些分区里可都是我的心血...
游戏中不起眼的后退键宏,为何能... 在游戏的世界里,每个按键都像是一个小小的咒语,而其中一个最让我心动的,就是那个不起眼的后退键宏。这不...
igfxtrayexe下载-电... 哎呀,说到这个Igfxtray.exe下载,我简直要抓狂了!你们知道吗,这个东西,简直就是电脑小白的...
passtemp是什么意思车上... 哎呀,说到这个Passtemp,真是让人一头雾水!我这开车的老司机,听说过各种车上的名词,什么ABS...
易分销下载:让小店生意飞起来的... 大家好,我是你们的小店主小明,今天我要跟大家聊聊那个让我的小店生意飞起来的神奇工具——易分销下载!说...
资源管理器 标签-资源管理器标... 哎呀,说到资源管理器里的标签功能,我这心里的五味瓶就打翻了。你知道吗,有时候它简直就是我的救星,有时...
android手机测试-And... 嘿,大家好!今天我要来聊聊我的Android手机测试经历,这可真是一场充满惊喜和惊吓的大冒险啊!首先...
冠心病及护理ppt-了解冠心病... 大家好,我是你们的心脏,今天我想和大家聊聊一个让我有点小紧张的话题——冠心病。这可不是什么小问题,它...
正版系统多次安装-正版系统频繁... 哎呀,每次说到这正版系统,我就一肚子火!你知道吗,我那心爱的电脑,被我装了又装,卸了又卸的正版系统,...
chrome os可以运行ap... 大家好,我是你们的小编,今天真是超级激动啊!你们知道吗?我们的ChromeOS现在居然可以运行APK...
网上竟有人公开贩卖身份证号大全... 哎呀我的天啊!今天我上网一看,发现竟然有人在网上公开贩卖什么“身份证号大全加手机号”,我真的是震惊了...
门诊医生工作站:充满挑战与戏剧... 哎呀,说到这门诊医生工作站,真是让人又爱又恨的地方!每天踏进这个小小的空间,就像是走进了一个充满挑战...
手动运行ghost-手动运行 ... 哎呀,说到手动运行Ghost,这可不是什么简单的事儿!我得告诉你,这就像是一场无人知晓的探险,每一步...
shopnc b2b2c 插件... 哎呀,说到这个ShopNCB2B2C插件啊,我这心里就激动得像小鹿乱撞!你知道吗,这个插件简直就是电...
联想u330p驱动-联想 U3... 大家好,我是一个普通的电脑用户,今天我要来聊聊那个让我又爱又恨的联想U330p驱动!说实话,每次想到...