二叉树简答题,二叉树题型

  二叉树简答题,二叉树题型

  Yyds干货库存

  @TOC

  一. 104二叉树的最大深度

  给定一棵二叉树,求其最大深度。

  二叉树的深度是从根节点到最远的叶节点的最长路径上的节点数。

  注意:叶节点是指没有子节点的节点。

  示例:

  给定二叉树[3,9,20,null,null,15,7],

  返回其最大深度3。

  /**

  *二叉树节点的定义。

  *结构树节点{

  * int val

  * struct TreeNode * left

  * struct TreeNode * right

  * };

  int max depth(struct TreeNode * root){

  if(root==NULL)

  返回0;

  int left=maxDepth(根左);

  int right=max depth(root-right);

  向左向右返回?左1:右1;

  }

  主要思路是分而治之,大事化小,把它变成一个有根节点的。

  A的左子树和A的右子树,然后分别判断左子树和右子树的最大深度,

  最大值1是二叉树的最大深度。

  递归展开图

  二。110.平衡二叉树

  给定一棵二叉树,判断它是否是一棵高度平衡的二叉树。

  在这个问题中,高度平衡的二叉树被定义为:

  二叉树的每个节点的左右子树的高度差的绝对值不超过1。

  /**

  *二叉树节点的定义。

  *结构树节点{

  * int val

  * struct TreeNode * left

  * struct TreeNode * right

  * };

  int max depth(struct TreeNode * root){

  if(root==NULL)

  返回0;

  int left=maxDepth(根左);

  int right=max depth(root-right);

  向左向右返回?左1:右1;

  bool is balanced(struct TreeNode * root){

  if(root==NULL)

  返回true

  int left depth=max depth(root-left);

  int right depth=max depth(root-right);

  返回abs(leftdepth-rightdepth) 2

  isBalanced(根左)

  isBalanced(根右);

  }

  本主题也使用二叉树的最大深度。我最初的想法是紧跟话题。

  找到根节点的左子树和根节点的右子树,但是后来我发现我忽略了一个条件,那就是每个节点必须是一个差异。

  这个问题还用到了C语言中使用的abs来求绝对值。

  只有满足这一点的左子树和左子树的差小于2,左子树和右子树本身的递归差小于2。

  递归展开图

  第三,二叉树遍历

  写一个程序,读入用户输入的一串优先遍历字符串,根据这个字符串建立一个二叉树(存储为指针)。比如下面的序列遍历字符串:ABC##DE#G##F###其中“#”代表一个空格,空格字符代表一棵空树。建立这个二叉树后,按中间顺序遍历二叉树,输出遍历结果。

  输入描述:

  输入1行的字符串,长度不超过100。

  输出描述:

  可能有多组测试数据,并且对于每组数据,

  将输入字符串构建到二叉树中后,按中间顺序遍历序列,每个字符后面跟一个空格。

  每个输出结果占据一行。

  示例1

  投入

  abc##de#g##f###

  输出

  中国工商银行

  #包含stdio.h

  #包含stdlib.h

  typedef结构treenode

  char val

  struct treenode * left

  struct treenode * right

  } BTnode

  BTnode*tree(char *a,int*i)//创建一个二叉树

  if(a[*i]==# )

  (* I);//将#视为空格,跳过

  返回NULL

  Bt node * root=(Bt node *)malloc(sizeof(Bt node));//在函数中创建一个二叉树结构类型,最大程度的知道二叉树的节点数。

  root-val=a[* I];

  (* I);//不要忘记将i 1和A的值指向这里的下一个

  root- left=tree(a,I);//两次循环调用

  root- right=tree(a,I);

  返回根目录;//返回结构指针,可以找到二叉树

  Void inorder(BTnode*root)//二叉树的中序遍历递归

  if(root==NULL)

  返回;

  inorder(根左);//左侧树

  printf(%c ,root-val);//根

  inorder(根右);//右侧子树

  int main()

  char arr[40]={ 0 };

  scanf(%s ,arr);

  int I=0;//这里我们想通过函数得到I的值,需要通过引用调用。

  BTnode*root=tree(arr,

  inorder(根);

  返回0;

  }

  首先以这个题目的例子为例。# 代表空间。

  abc##de#g##f###

  递归展开图

  。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: