递归求二叉树宽度,递归实现二叉树左右子树交换

  递归求二叉树宽度,递归实现二叉树左右子树交换

  Yyds干货库存

  @TOC

  首先,二叉树

  1.概念

  二叉树是节点的有限集合,它或者是空的,或者是由一个根节点加上两个叫做左子树和右子树的二叉树组成。

  每个节点最多有两个子树,即二叉树中没有大于2的节点。

  二叉树的子树分左右,子树的顺序不能颠倒。

  3.特殊二叉树

  1.完全二叉树

  一棵二叉树,如果每一层的节点达到最大,就是全二叉树,也就是说,如果一棵二叉树的层数为k,节点总数为(2 k)-1,就是全二叉树。

  2.完全二叉树

  对于深度为k的二叉树,有n个节点,只有当每个节点和深度为k的完全二叉树中从1到n编号的节点才称为完全二叉树。

  如果根节点的数量是1,则在非空二叉树的第I层上最多有2 (I-1)个节点。

  如果根节点数为1,深度为h的二叉树中的最大节点数为(2 h)-1。

  对于任意二叉树,如果叶节点数为n0,度为0,分支节点数为n2,则n0=N2 ^ 1。

  (有好几个子树,度是一样的)

  如果根节点数为1,则n个节点的全二叉树的深度h=log n。

  2^h -1=N

  2^h=N 1号

  h=log 2 N 1

  然而,由于省略了大O的渐进表示,时间复杂度变为O(log N)

  不太了解大O递进表征的人:时间复杂度和空间复杂度

  二、二叉树的整体实现

  1.序言的实现

  void pre order(Bt node * root)//)//前序根的左子树和右子树

  if (root==NULL)

  printf( NULL );

  返回;

  printf(%c ,root-data);

  前序(左根);

  前序(根右);

  }

  递归展开图

  2.中间秩序的实现

  Void inorder(BTnode* root)//中间顺序左子树根右子树

  if (root==NULL)

  printf( NULL );

  返回;

  inorder(根左);

  printf(%c ,root-data);

  inorder(根右);

  }

  递归展开图

  3.后一序列的实现。

  Void postorder(BTnode* root)//逆序左子树的右子树的根

  if (root==NULL)

  printf( NULL );

  返回;

  后序(根左);

  后序(根右);

  printf(%c ,root-data);

  }

  递归展开图

  4.节点数量

  Int treesize(BTnode* root)//节点数

  if (root==NULL)

  返回0;

  返回treesize(左根)treesize(右根)1;

  }

  递归展开图

  5.叶节点的数量

  intreafsize(Bt node * root)//叶节点的数量

  if (root==NULL)

  返回0;

  if(root-left==NULL root-right==NULL)//1只有在左右子树都为NULL的情况下才会返回。

  返回1;

  返回treeleafsize(根左)treeleafsize(根右);

  }

  递归展开图

  6.序列遍历

  void levelorder(BTnode* root)//序列遍历需要借助数据结构栈来实现。

  队列q;

  Queueinit( //初始化堆栈

  如果(根)

  queuepush( q,root);//将根节点放到堆栈上

  而(!queueempty( q))

  数据类型front=queuefront( //堆栈外

  queue(//删除堆栈的顶部元素

  printf(%c ,front-data);

  如果(前左!=空)

  queuepush( q,前左);//判断此时该节点的左子树是否为空,如果不是,则放入堆栈。

  如果(前-右!=空)

  queuepush( q,前右);//判断此时该节点的右子树是否为空,如果不是,则放入堆栈。

  Queuedestroy( //销毁内存

  }

  我相信我会对学习更感兴趣。让我们一起欢呼吧。

  不自信的小伙伴可以看看这个训练Niuke.com。

  。

郑重声明:本文由网友发布,不代表盛行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各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: