当前位置: 首页 > news >正文

用php做的网站用什么数据库深圳靠谱网站建设公司

用php做的网站用什么数据库,深圳靠谱网站建设公司,手机网站自动跳转怎么解决,婚恋交友网站建设策划一开始学的时候写的是递归遍历。。。好入门啊!!1真的!!!比非递归遍历树理解起来感觉简单多了!!! 二叉树是一种树形结构。每个节点至多只有两棵子树。其子树有左右之分,次…

一开始学的时候写的是递归遍历。。。好入门啊!!1真的!!!比非递归遍历树理解起来感觉简单多了!!!

二叉树是一种树形结构。每个节点至多只有两棵子树。其子树有左右之分,次序是不能任意颠倒的。

先说一下树的建立。

 

 

用一个结构体来表示二叉树的节点。

节点包括其一个数据域和left、right两个指针域分别指向左右子树节点的地址。

1 typedef struct node
2 {
3     int data;
4     struct node *left;
5     struct node *right;
6 } BTree;

二叉树的构造:

传入根节点,从左子树开始构造。

控制条件为当输入的x大于0,一旦小于或者等于零,该节点为空。

若大于0,将树节点中指针指向该地址空间。需要判断是否分配内存成功,若失败返回0。

将输入的x存入到tp指向结点的数据域内。

指针一直向左走,递归调用种树函数,左边走完之后向右走。(顺序与前序遍历一致)

 1 Status BTreeCreate (BTree **tp)
 2 {
 3     //从左子数开始构造
 4     int x;
 5     scanf("%d",&x);
 6     if(x<=0)
 7     {
 8         *tp=NULL;
 9         return 0;
10     }
11     *tp=(BTree*)malloc(sizeof(BTree));//将树节点中指针指向该地址空间
12     if(tp==NULL) return 0;//内存分配失败
13     (*tp)->data=x;
14     BTreeCreate(&((*tp)->left));
15     BTreeCreate(&((*tp)->right));
16     return OK;
17 }

三种递归遍历的实现:

前序遍历:从根开始一直向左走,左边走完了向右走,右边也读完了就返回上一个未走完的结点继续向右走……    根→左→右

中序遍历:从根开始向左走到最左读出数据后又往回走一个结点,向右结点走(走到最左)……天啊我的表达能力实在不行。。。。 左→根→右

后序遍历:把左边的读完了就读右边的,左边大子树读完了就读右边的大子树,依然是把左边的读完了就读右边的,最后再读根结点。   左→右→根

递归遍历的算法比较好理解,代码也比较简洁。三种都基本长一个样,不同的就是读数据输出的那一条语句与递归调用遍历函数的两个语句次序不同。

 1 void PreOrder(BTree *tree)//前序遍历,先根节点,再左子树后右子树
 2 {
 3     if(tree==NULL)
 4     {
 5         return ;
 6     }
 7     printf("%d ",tree->data);
 8     PreOrder(tree->left);
 9     PreOrder(tree->right);
10 }
11 void MidOrder(BTree *tree)
12 {
13     if(tree==NULL)
14     {
15         return ;
16     }
17     MidOrder(tree->left);
18     printf("%d ",tree->data);
19     MidOrder(tree->right);
20 }
21 void PostOrder(BTree *tree)
22 {
23     if(tree==NULL)
24     {
25         return ;
26     }
27     PostOrder(tree->left);
28     PostOrder(tree->right);
29     printf("%d ",tree->data);
30 }

求二叉树的深度:

这里也是用了递归调用,一开始设定树的深度为1(只要不为空就为1)。递归调用函数通过遍历树(每走一个点深度+1)求出左右子树的深度,最后返回树的深度比较大的值即为树的深度。

1 int TreeDepth(BTree *tree)//求二叉树的深度
2 {
3     if(tree==NULL)//如果tree为NULL 深度为0 ,也是递归返回的条件。
4      return 0;
5     int left=1,right=1;//如果tree不为NULL则深度是至少为1的 所以right和left为1
6     left+=TreeDepth(tree->left);//求左子树的深度
7     right+=TreeDepth(tree->right);//求右子树的深度
8     return left>right?left:right;//返回深度比较大的那一个
9 }

完整的代码实现:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<iostream>
  4 using namespace std;
  5 #define TRUE 1
  6 #define FALSE 0
  7 #define OK 1
  8 #define ERROR 0
  9 #define OVERFLOW -2
 10 typedef int Status;
 11 typedef int ElemType;
 12 
 13 typedef struct node
 14 {
 15     int data;
 16     struct node *left;
 17     struct node *right;
 18 } BTree;
 19 
 20 Status BTreeCreate (BTree **tp)
 21 {
 22     //从左子数开始构造
 23     int x;
 24     scanf("%d",&x);
 25     if(x<=0)
 26     {
 27         *tp=NULL;
 28         return 0;
 29     }
 30     *tp=(BTree*)malloc(sizeof(BTree));//将树节点中指针指向该地址空间
 31     if(tp==NULL) return 0;//内存分配失败
 32     (*tp)->data=x;
 33     BTreeCreate(&((*tp)->left));
 34     BTreeCreate(&((*tp)->right));
 35     return OK;
 36 }
 37 void PreOrder(BTree *tree)//前序遍历,先根节点,再左子树后右子树
 38 {
 39     if(tree==NULL)
 40     {
 41         return ;
 42     }
 43     printf("%d ",tree->data);
 44     PreOrder(tree->left);
 45     PreOrder(tree->right);
 46 }
 47 void MidOrder(BTree *tree)
 48 {
 49     if(tree==NULL)
 50     {
 51         return ;
 52     }
 53     MidOrder(tree->left);
 54     printf("%d ",tree->data);
 55     MidOrder(tree->right);
 56 }
 57 void PostOrder(BTree *tree)
 58 {
 59     if(tree==NULL)
 60     {
 61         return ;
 62     }
 63     PostOrder(tree->left);
 64     PostOrder(tree->right);
 65     printf("%d ",tree->data);
 66 }
 67 
 68 
 69 void BTreeSetNULL(BTree *tree)//做完实验就记得释放空间。。节约内存从我做起(笑)
 70 {
 71     if(tree==NULL)
 72     {
 73         return ;
 74     }
 75     BTreeSetNULL(tree->left);
 76     BTreeSetNULL(tree->right);
 77     free(tree);
 78 }
 79 int TreeDepth(BTree *tree)//求二叉树的深度
 80 {
 81     if(tree==NULL)//如果tree为NULL 深度为0 ,也是递归返回的条件。
 82      return 0;
 83     int left=1,right=1;//如果tree不为NULL则深度是至少为1的 所以right和left为1
 84     left+=TreeDepth(tree->left);//求左子树的深度
 85     right+=TreeDepth(tree->right);//求右子树的深度
 86     return left>right?left:right;//返回深度比较大的那一个
 87 }
 88 int main()
 89 {
 90     BTree *tree;
 91     cout<<"Create binary tree:\n"<<endl;
 92     BTreeCreate(&tree);
 93 
 94     printf("Pre Order:\n");
 95     PreOrder(tree);
 96     printf("\n");
 97 
 98     printf("Mid Order:\n");
 99     MidOrder(tree);
100     printf("\n");
101 
102     printf("Post Order:\n");
103     PostOrder(tree);
104     printf("\n");
105 
106     cout<<"The depth of the tree is"<<TreeDepth(tree)<<endl;
107 
108     BTreeSetNULL(tree);
109 
110 
111 
112     return 0;
113 }

 

转载于:https://www.cnblogs.com/AKsnoopy/p/4921647.html

http://www.lbrq.cn/news/2795887.html

相关文章:

  • wordpress横线广州网站优化软件
  • wordpress增加论坛苏州seo公司
  • 诸城网站优化阿里域名购买网站
  • asp艺术学校网站源码济南seo外包服务
  • p2p网站建设价格百度正版下载恢复百度
  • 网站搭建论文app开发平台
  • 地图网站模板做网络推广可以通过哪些渠道推广
  • 如何在网站上做标记圈信息网站怎么优化关键词
  • 制作网站页面怎么做sem管理工具
  • 购物网站建设报价网站快速收录
  • 建设交通职业技术学院招聘信息网站中国科技新闻网
  • 做商城网站哪里买seo技术员
  • 政治工作网站管理建设网站seo推广公司靠谱吗
  • 台州网站搭建电商网站建设
  • 北京网站建设icp有限公司百度推广个人怎么开户
  • 网站服务器试用游戏广告推广平台
  • 自己做网站去哪买服务器seo建站技巧
  • 西安建网站价格免费学生网页制作成品
  • 做网站怎样找湖南搜索引擎推广平台
  • 个人响应式网站建设搜索引擎优化的办法有哪些
  • wordpress侧边栏目录seo单词优化
  • 网站建设的步骤教程下载2023年8月份新冠
  • 宁晋企业做网站广告关键词查询
  • 网站建设新闻发布注意什么怎么制作网站教程手机
  • 怎么自制网站dz论坛seo设置
  • 什么网站可以做项目网站关键词优化排名公司
  • 做关于什么的网站关键字排名查询
  • 巩义企业网站托管代运营公司网店代运营合同
  • 长安区网站建设小网站广告投放
  • 高新公司网站建设电话什么样的人适合做策划
  • Design Compiler:逻辑库名与逻辑库文件名及其指定方式
  • Android14内核调试 - boot vendor_boot
  • 使用C++17标准 手写一个vector
  • Transformer十问
  • 35岁对工作的一些感悟
  • Mac(七)右键新建文件的救世主 iRightMouse