

二叉树练习题_萌新的日常的技术博客_51CTO博客
source link: https://blog.51cto.com/u_15787387/5690997
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最大深度 3 。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root){
if(root==NULL)
{
return 0;
}
int left=maxDepth(root->left);
int right=maxDepth(root->right);
return left>right?left+1:right+1;
}
主要是分治思想,大事化小,把其化成带有根节点的A
A的左子树,A的右子树 ,再分别判断左子树与右子树的最大深度,
取两者最大值+1即二叉树的最大深度
递归展开图
二、110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root){
if(root==NULL)
{
return 0;
}
int left=maxDepth(root->left);
int right=maxDepth(root->right);
return left>right?left+1:right+1;
}
bool isBalanced(struct TreeNode* root){
if(root==NULL)
{
return true;
}
int leftdepth=maxDepth(root->left);
int rightdepth=maxDepth(root->right);
return abs(leftdepth-rightdepth)<2
&&isBalanced(root->left)
&&isBalanced(root->right);
}
本题也是使用了二叉树的最大深度,我本来的想法是跟上题差不多
求根节点的左子树 和根节点的右子树,但是后来我发现忽略了每个节点都要差一这个条件。
这道题也是使用了c语言求绝对值所使用的 abs
只有满足该点的左子树和左子树相差小于2并且左子树与右子树本身递归也相差小于2才成立
递归展开图
三、二叉树遍历
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。
示例1
输入
abc##de#g##f###
输出
c b e g d f a
#include<stdio.h>
#include<stdlib.h>
typedef struct treenode
{
char val;
struct treenode*left;
struct treenode*right;
}BTnode;
BTnode*tree(char *a,int*i)//创建二叉树
{
if(a[*i]=='#')
{
(*i)++;//为#看作一个空格 ,跳过
return NULL;
}
BTnode*root=(BTnode*)malloc(sizeof(BTnode));//在函数内创建二叉树结构体类型,最大程度上知道了二叉树的节点个数
root->val=a[*i];
(*i)++;//这里不要忘记将i+1 ,将a的值指向下一个
root->left=tree(a,i);//两次循环调用
root->right=tree(a,i);
return root;//返回结构体指针,可以找到二叉树
}
void inorder(BTnode*root)//二叉树的中序遍历 递归
{
if(root==NULL)
{
return ;
}
inorder(root->left);//左子树
printf("%c ",root->val);//根
inorder(root->right);//右子树
}
int main()
{
char arr[40]={0};
scanf("%s",arr);
int i=0;//这里我们想要通过函数得到i的值 ,需要传址调用
BTnode*root=tree(arr,&i);
inorder(root);
return 0;
}
首先就以本题的例子来说明,'#'代表空格
abc##de#g##f###
递归展开图
Recommend
-
13
C语言练习题_1 原创 Qiue. 2022-07-06 16:46:40...
-
6
一、文件的分类 从文件的功能考虑分为 程序文件和 数据文件 程序文件包括(后缀为.c)的源程序文件,(后缀为.obj)的目标文件,(后缀为.exe)的可执行程序 数据文件为程序运行时读写的数据 二、...
-
11
链表专项练习(四) 精选 原创 萌新的日常 2022-09-19 10:37:22...
-
11
一、160. 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交 题目数据 保证 整个链式结构中不存在...
-
6
时间复杂度与空间复杂度 精选 原创 一、时间复杂度
-
4
替换空格问题 精选 原创 萌新的日常 2022-10-20 16:57:24...
-
5
C++引用详解 精选 原创 萌新的日常 2022-11-18 15:44:38...
-
5
一.堆排序 1.使用向上还是向下调整建堆好? (1)向上调整算法建堆的时间复杂度 void adjustup(HPDatatype* a, int child)//向上调整算法 { int parent = (child - 1) / 2; wh...
-
7
C++类和对象(上) 精选 原创 <font color=red>1.将数据和方法放到定义一起</font> <font color=Blue>c+...
-
7
C++——构造函数和析构函数 精选 原创 萌新的日常 2022-12-21 08:06:44...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK