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

零食网站色调搭配怎麽做c 小说网站开发教程

零食网站色调搭配怎麽做,c 小说网站开发教程,马鞍山网站建设咨,电商网课教材一、二叉树定义二叉树是N#xff08;N0#xff09;个节点的有限集#xff0c;它可能是空集或者由一个根节点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。二、二叉树特点1、每个节点最多两个孩子。#xff08;也就是二叉树的度小于等于2#xff09;2…一、二叉树定义二叉树是NN0个节点的有限集它可能是空集或者由一个根节点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。二、二叉树特点1、每个节点最多两个孩子。也就是二叉树的度小于等于22、根有左右之分不可颠倒。3、二叉树可以是空集根的左子树或右子树可以为空。三、图示四、二叉树性质1、性质一深度为k的二叉树至多有2的k次方再减一。推导第一层有一个2的0次方第二层最多有两个2的1次方第三层最多有四个2的2次方。我们可以用等比求和公式Sn(a1-an*q)/(1-q)(1-4*2)/(-1)7。2、性质二在二叉树的第i层上至多有2的i-1次方个节点。3、性质三对任何一棵二叉树T如果其叶子数为n0度为2的节点数为n2n0n21。五、特殊形式的二叉树1、满二叉树1定义和图示满二叉树在相同深度的二叉树中结点数和叶子结点数是最多的。2、完全二叉树1定义和图示深度为k的具有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应时称之为完全二叉树。满二叉树是完全二叉树完全二叉树不一定是满二叉树。2特性一具有n个结点的完全二叉树深度为log(2)(n)向下取整1。3特性二如果对一棵有n个结点的完全二叉树深度为log(2)(n)向下取整1的结点按照层序编号从上到下从左到右则对于任一结点i1in有1如果i1则结点i是二叉树的根无双亲。如果是i1则双亲是结点i/2再向下取整。2如果2in则结点i为叶子节点无左孩子否则其左孩子是结点2i。3如果2i1n则结点i无右孩子。否则其右孩子是结点2i1。六、二叉搜索树二叉搜索树Binary Search Tree简称BST如果结点的左子树不为空则左子树存储的数据需要小于结点存储的数据。如果结点的右子树不为空则右子树存储的数据需要大于结点存储的数据。二叉搜索树的中序遍历最终会形成一个从小到大排列的数组。将数组{6,3,8,2,5,1,7}变为一棵BSTBST如下图七、BST结构体1、BinaryTreeNode1描述二叉树结点定义Data数据域LeftNodePtr左子树指针RightNodePtr右子树指针JudegeTreeUsedArray在非递归后续遍历时用到其他并未用到数组长度2分别表示左右子树状态JUDGE_TREE_UNUSED为此树没遍历JUDGE_TREE_USED为此树遍历。2定义#define JUDGE_TREE_UNUSED 0 #define JUDGE_TREE_USED 1 #define JUDGE_TREE_ARRAY_LEN 2typedef int ElemType;typedef struct BinaryTreeNode {ElemType Data;struct BinaryTreeNode* LeftNodePtr;struct BinaryTreeNode* RightNodePtr;int JudegeTreeUsedArray[JUDGE_TREE_ARRAY_LEN];//为了实现非递归后序遍历使用的数据其他遍历方法未使用。 }BinaryTreeNode, *BinaryTreeNodePtr;2、BinaryTree1描述二叉树结点定义NodePtr树的根节点TreeNodeNum树的总结点数。2定义typedef struct BinaryTree {BinaryTreeNodePtr NodePtr;BinaryTreeSizeType TreeNodeNum; }BinaryTree;八、BST函数其中前中后序遍历非递归方法实现需要用到顺序栈可以参考之前写的博客《数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现》和《数据结构与算法基础-学习-10-线性表之顺序栈的清理、销毁、压栈、弹栈》1、NewBinaryTreeNode1描述生成一个新节点把数据放入结点中。2定义BinaryTreeNodePtr NewBinaryTreeNode(ElemType InputData) {BinaryTreeNodePtr NewNodePtr (BinaryTreeNodePtr)MyMalloc(sizeof(BinaryTreeNode));NewNodePtr-Data InputData;NewNodePtr-LeftNodePtr NULL;NewNodePtr-RightNodePtr NULL;memset(NewNodePtr-JudegeTreeUsedArray, JUDGE_TREE_UNUSED, sizeof(int) * JUDGE_TREE_ARRAY_LEN);//非递归前序遍历使用Log(New Binary Tree Node : OK\n,Debug);return NewNodePtr; }3参数介绍参数名描述InputDataElemType类型的数据。2、GetBinaryTreeNodeNum1描述获取BST的总结点数。2定义BinaryTreeSizeType GetBinaryTreeNodeNum(BinaryTree* BT) {JudgeAllNullPointer(BT);return BT-TreeNodeNum; }3参数介绍参数名描述BTBinaryTree*类型的BST指针。3、CmpElemTypeData1描述对比ET1和ET2的大小。2定义#define LARGE_FLAG 0 #define LITTLE_FLAG 1 #define EQUAL_FLAG 2Status CmpElemTypeData(ElemType ET1, ElemType ET2) {if(ET1 ET2){return LARGE_FLAG;}else if(ET1 ET2){return LITTLE_FLAG;}else{return EQUAL_FLAG;} }3参数介绍参数名描述ET1ElemType类型数据。ET2ElemType类型数据。4、AddBinarySearchTreeNode1描述将InputData数据放入BST中。2定义//假设二叉搜索树中没有相同元素且数据都是正数根节点大于左子树小于右子树。 Status AddBinarySearchTreeNode(BinaryTree* BT, ElemType InputData) {JudgeAllNullPointer(BT);if(BT-NodePtr NULL){BT-NodePtr NewBinaryTreeNode(InputData);BT-TreeNodeNum;Log(Add BST Node : OK\n,Debug);return SuccessFlag;}BinaryTreeNodePtr TmpPtr BT-NodePtr;while(TmpPtr){if(CmpElemTypeData(TmpPtr-Data, InputData) LARGE_FLAG){if(TmpPtr-LeftNodePtr NULL){TmpPtr-LeftNodePtr NewBinaryTreeNode(InputData);BT-TreeNodeNum;Log(Add BST Node : OK\n,Debug);return SuccessFlag;}TmpPtr TmpPtr-LeftNodePtr;}else if(CmpElemTypeData(TmpPtr-Data, InputData) LITTLE_FLAG){if(TmpPtr-RightNodePtr NULL){TmpPtr-RightNodePtr NewBinaryTreeNode(InputData);BT-TreeNodeNum;Log(Add BST Node : OK\n,Debug);return SuccessFlag;}TmpPtr TmpPtr-RightNodePtr;}else{Log(AddBinarySearchTreeNode function not supported : same element.\n,Debug);Log(Add BST Node : Fail\n,Debug);return FailFlag;}}return FailFlag; }3参数介绍参数名描述BTBinaryTree*类型的BST。InputDataElemType类型的输入数据。5、NewBinarySearchTree1描述给一个数组生成一棵BST。2定义Status NewBinarySearchTree(BinaryTree* BT, ElemType* Array) {BinaryTreeSizeType i; for(i 0; i InsertDataArrayLen; i){AddBinarySearchTreeNode(BT, Array[i]);}Log(New Binary Search Tree: OK\n,Info);return SuccessFlag; }3参数介绍参数名描述BTBinaryTree*类型的BST。ArrayElemType*类型的输入数据数据。6、InitBinaryTree1描述初始化二叉树。2定义Status InitBinaryTree(BinaryTree* BT) {JudgeAllNullPointer(BT);BT-TreeNodeNum 0;Log(Init Binary Tree : OK\n,Info);return SuccessFlag; }3参数介绍参数名描述BTBinaryTree*类型的BST。7、InOrderTraverseNoRecursion1描述中序遍历非递归方法实现。2定义Status InOrderTraverseNoRecursion(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}SqStack* S (SqStack*)MyMalloc(sizeof(SqStack));BinaryTreeNodePtr TmpPtr RootPTR;InitSqStack(S);while(TmpPtr || JudgeSqStackIsEmpty(S) FailFlag)//如果指针和栈为空退出循环{if(TmpPtr)//如果节点不为空说明有数据中序遍历左根右。将根压入栈指针指向左子树。{PushSqStack(S, *TmpPtr);TmpPtr TmpPtr-LeftNodePtr;}else//如果节点为空说明左子树没有数据弹栈获取上一层节点指针获取根节点数据再将指针指向右子树。{BinaryTreeNodePtr TmpPtr1 (BinaryTreeNodePtr)MyMalloc(sizeof(BinaryTreeNode));PopSqStack(S, TmpPtr1);Insert2GlobalArray(GA,TmpPtr1-Data);TmpPtr TmpPtr1-RightNodePtr;free(TmpPtr1);TmpPtr1 NULL;}}DestroyStack(S);return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。8、PreOrderTraverseNoRecursion1描述前序遍历非递归方法实现。2定义Status PreOrderTraverseNoRecursion(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}SqStack* S (SqStack*)MyMalloc(sizeof(SqStack));BinaryTreeNodePtr TmpPtr RootPTR;InitSqStack(S);while(TmpPtr || JudgeSqStackIsEmpty(S) FailFlag)//如果指针和栈为空退出循环{if(TmpPtr){PushSqStack(S, *TmpPtr);Insert2GlobalArray(GA,TmpPtr-Data);TmpPtr TmpPtr-LeftNodePtr;}else{BinaryTreeNodePtr TmpPtr1 (BinaryTreeNodePtr)MyMalloc(sizeof(BinaryTreeNode));PopSqStack(S, TmpPtr1);TmpPtr TmpPtr1-RightNodePtr;free(TmpPtr1);TmpPtr1 NULL;}}DestroyStack(S);return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。9、PostOrderTraverseNoRecursion1描述后序遍历非递归方法实现。2定义Status PostOrderTraverseNoRecursion(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}SqStack* S (SqStack*)MyMalloc(sizeof(SqStack));BinaryTreeNodePtr TmpPtr RootPTR;InitSqStack(S);while(TmpPtr || JudgeSqStackIsEmpty(S) FailFlag)//如果指针和栈为空退出循环{if(TmpPtr TmpPtr-JudegeTreeUsedArray[0] JUDGE_TREE_UNUSED){TmpPtr-JudegeTreeUsedArray[0] JUDGE_TREE_USED;PushSqStack(S, *TmpPtr);TmpPtr TmpPtr-LeftNodePtr;}else{BinaryTreeNodePtr TmpPtr1 (BinaryTreeNodePtr)MyMalloc(sizeof(BinaryTreeNode));PopSqStack(S, TmpPtr1);if((TmpPtr1-JudegeTreeUsedArray)[JUDGE_TREE_ARRAY_LEN-1] JUDGE_TREE_USED){//printf(%d %d\n,TmpPtr1-JudegeTreeUsedArray[0],TmpPtr1-JudegeTreeUsedArray[JUDGE_TREE_ARRAY_LEN-1]);Insert2GlobalArray(GA,TmpPtr1-Data);//PrintfGlobalArray(GA,tmp);if(PopSqStack(S, TmpPtr1) FailFlag)//如果栈是空的说明已经完成所有节点的遍历跳出循环。{free(TmpPtr1); TmpPtr1 NULL;break;}}TmpPtr TmpPtr1-RightNodePtr;TmpPtr1-JudegeTreeUsedArray[JUDGE_TREE_ARRAY_LEN-1] JUDGE_TREE_USED;PushSqStack(S, *TmpPtr1);free(TmpPtr1);TmpPtr1 NULL;}}DestroyStack(S);return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。10、InOrderTraverse1描述中序遍历递归方法实现。2定义Status InOrderTraverse(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}else{InOrderTraverse(RootPTR-LeftNodePtr);//printf(%d\n,RootPTR-Data);Insert2GlobalArray(GA,RootPTR-Data);InOrderTraverse(RootPTR-RightNodePtr);}return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。11、PreOrderTraverse1描述前序遍历递归方法实现。2定义Status PreOrderTraverse(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}else{Insert2GlobalArray(GA,RootPTR-Data);PreOrderTraverse(RootPTR-LeftNodePtr);PreOrderTraverse(RootPTR-RightNodePtr);}return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。12、PostOrderTraverse1描述后序遍历递归方法实现。2定义Status PostOrderTraverse(BinaryTreeNodePtr RootPTR) {if(RootPTR NULL){return SuccessFlag;}else{PostOrderTraverse(RootPTR-LeftNodePtr);PostOrderTraverse(RootPTR-RightNodePtr);Insert2GlobalArray(GA,RootPTR-Data);}return SuccessFlag; }3参数介绍参数名描述RootPTRBinaryTreeNodePtr类型根节点。九、LINUX环境测试[gbaseczg2 Tree]$ make gcc -Wall -g ../Log/Log.c BinaryTree.c main.c -o TestBinaryTree -I ../Log/[gbaseczg2 Tree]$ ./TestBinaryTree 2023-3--[Info]--Init Global Array : OK 2023-3--[Info]--Init Binary Tree : OK 2023-3--[Info]--New Binary Search Tree : OK 2023-3--[Info]--PreOrderTraverse : [6 ,3 ,2 ,1 ,5 ,8 ,7 ], CurSize : 7 2023-3--[Info]--InOrderTraverse : [1 ,2 ,3 ,5 ,6 ,7 ,8 ], CurSize : 7 2023-3--[Info]--PostOrderTraverse : [1 ,2 ,5 ,3 ,7 ,8 ,6 ], CurSize : 7 2023-3--[Info]--PreOrderTraverseNoRcs : [6 ,3 ,2 ,1 ,5 ,8 ,7 ], CurSize : 7 2023-3--[Info]--InOrderTraverseNoRcs : [1 ,2 ,3 ,5 ,6 ,7 ,8 ], CurSize : 7 2023-3--[Info]--PostOrderTraverseNoRcs : [1 ,2 ,5 ,3 ,7 ,8 ,6 ], CurSize : 7
http://www.w-s-a.com/news/412752/

相关文章:

  • 举报非法网站要求做笔录wordpress怎么插视频
  • 网站服务器防护如何搭建网站平台
  • 设计师接私活的网站如何做网站的搜索栏
  • ps做图下载网站网站子目录设计
  • 厦门网站制作策划高中生做网站网页
  • 高端品牌网站建设在哪济南兴田德润优惠吗专业定制网站开发公司
  • 怎么做网站卖东西汽车网站排行榜前十名
  • 网站关键字没有排名只有单页面的网站怎么做seo
  • 网站流量盈利模式宝塔没有域名直接做网站怎么弄
  • 淡蓝色网站qq推广中心
  • 设计网站价格餐饮吸引客流的活动方案
  • 手机网站建设电话百度搜索量
  • 条件查询 php网站源码中国白云手机网站建设
  • 网上注册公司流程及材料班级优化大师免费下载电脑版
  • 应用网站如何做营销型网站的重要特点
  • 怎么样百度搜到自己的网站加强社区网站建设
  • 建设网站所需技术wordpress延时加载js
  • 网站建设沈阳搜云seo
  • 怎么申请免费的网站空间微信公众平台注册收费吗
  • 东营网站搭建最基本的网站设计
  • 网站建设技术的发展最近的国际新闻大事
  • 德州有名的网站建设公司网站如何做引流
  • 建设一个收入支出持平的网站网络推广计划书格式
  • 什么是网站黑链全球新冠疫苗接种率
  • 网站开发 chrome gimp网站不备案做seo没用
  • 织梦校园招生网站源码沪佳哪个好
  • 建设企业网站可信度软件产品如何做网站推广
  • 网站建设企业号助手贵阳景观设计公司
  • 网站开发第三方建设银行个人网站显示不了
  • 无锡兼职做网站郑州网站建设搜索优化