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

网站全屏弹出窗口企业自建网站

网站全屏弹出窗口,企业自建网站,黄金软件免费下载,cms建站详细教程二叉树同上一篇的递归遍历: 关于二叉树的非递归遍历,我们可以模拟堆栈: 先序遍历:先访问根节点,然后压入栈中,然后向左访问左子树节点,依次访问并压入栈中,当左子树为空时&#xff0…

二叉树同上一篇的递归遍历:在这里插入图片描述
关于二叉树的非递归遍历,我们可以模拟堆栈:
先序遍历:先访问根节点,然后压入栈中,然后向左访问左子树节点,依次访问并压入栈中,当左子树为空时(如图所示),在这里插入图片描述
获取栈顶元素并弹出栈顶,然后访问右子树(注意右子树不压入栈中),重复以上步骤,二叉树得以遍历。
以下是本人用自己写的栈接口实现的二叉树的非递归遍历(C语言实现):

#include <stdio.h>
#include <stdlib.h>
#include "Linkstack.h"
struct Person
{struct LinkNode head;int age;struct Person* left;struct Person* right;
};
//中序遍历
void inorderTraversal(struct Person* root)
{if (NULL == root){return;}struct Person* r = root;//创建初始化堆栈Stack stack = Init_LinkStack();//树非空或栈非空while (r || !isEmpty(stack)){//一直向左将节点压入栈中while (r){Push_LinkStack(stack, r);r = r->left;}//如果栈非空,弹出栈顶,节点向右子树移动if (!isEmpty(stack)){r=Top_LinkStack(stack);Pop_LinkStack(stack);printf("%d  ", r->age);r = r->right;}}
}
//先序遍历
void preorderTraversal(struct Person* root)
{if (NULL == root){return;}struct Person* r = root;//创建初始化堆栈Stack stack = Init_LinkStack();//树非空或栈非空while (r || !isEmpty(stack)){//一直向左将左子树压入栈中while (r){printf("%d  ", r->age);Push_LinkStack(stack, r);r = r->left;}//如果栈非空,弹出栈顶,节点向右子树移动if (!isEmpty(stack)){r = Top_LinkStack(stack);Pop_LinkStack(stack);r = r->right;}}
}
//后序遍历
void postorderTraversal(struct Person* root)
{if (NULL == root){return;}struct Person* r = root;//作为节点是否访问的标志struct Person* p = NULL;//创建初始化堆栈Stack stack = Init_LinkStack();//树非空或栈非空while (r || !isEmpty(stack)){//一直向左将左子树压入栈中while (r){Push_LinkStack(stack, r);r = r->left;}//如果栈非空,获取栈顶r = Top_LinkStack(stack);if (r->right && r->right != p)//右子树存在,未被访问{r = r->right;}else {Pop_LinkStack(stack);printf("%d  ", r->age);p = r;         //记录最近访问过的节点r = NULL;    //节点访问完后,重置r指针}}
}

下面是测试代码:

void test()
{struct Person p1 = { 0,1,NULL,NULL };struct Person p2 = { 0,2,NULL,NULL };struct Person p3 = { 0,3,NULL,NULL };struct Person p4 = { 0,4,NULL,NULL };struct Person p5 = { 0,5,NULL,NULL };struct Person p6 = { 0,6,NULL,NULL };struct Person p7 = { 0,7,NULL,NULL };struct Person p8 = { 0,8,NULL,NULL };struct Person p9 = { 0,9,NULL,NULL };struct Person p10 = { 0,10,NULL,NULL };struct Person p11 = { 0,11,NULL,NULL };struct Person p12 = { 0,12,NULL,NULL };struct Person p13 = { 0,13,NULL,NULL };p1.left = &p2;p1.right = &p3;p2.left = &p4;p2.right = &p5;p3.left = &p6;p3.right = &p7;p4.left = &p8;p4.right = &p9;p5.left = &p10;p5.right = &p11;p6.left = &p12;p6.right = &p13;printf("---------非递归先序遍历二叉树---------\n");preorderTraversal(&p1);printf("\n");printf("---------非递归中序遍历二叉树---------\n");inorderTraversal(&p1);printf("\n");printf("---------非递归后序遍历二叉树---------\n");postorderTraversal(&p1);printf("\n");
}
int main(int argc, char** argv)
{test();system("pause");return 0;
}

`在VS2017中代码正确执行:
在这里插入图片描述
下面是栈的接口声明:

#pragma once
#ifdef __cplusplus
extern"C" {
#endif // __cplusplus
#include<stdlib.h>//链表节点struct LinkNode{struct LinkNode* next;};//头节点struct LinkStack{struct LinkNode head;int size;};typedef void* Stack;//初始化栈Stack Init_LinkStack();//入栈void Push_LinkStack(Stack stack,void* data);//出栈void Pop_LinkStack(Stack stack);//获取栈顶void* Top_LinkStack(Stack stack);//获取栈的大小int Size_LinkStack(Stack stack);//销毁栈void Destroy_LinkStack(Stack stack);//是否为空int isEmpty(Stack stack);#ifdef __cplusplus
}
#endif // __cplusplus

栈接口的具体实现:

  #include"LinkStack.h"typedef void* Stack;//初始化栈Stack Init_LinkStack(){struct LinkStack* stack = malloc(sizeof(struct LinkStack));if (NULL == stack){return NULL;}stack->head.next= NULL;stack->size = 0;return stack;}//入栈void Push_LinkStack(Stack stack, void* data){if (NULL == stack){return;}if (NULL == data){return;}struct LinkStack* pstack = (struct LinkStack*)stack;struct LinkNode* p = (struct LinkNode*)data;p->next = pstack->head.next;pstack->head.next = p;//p->next = NULL;++(pstack->size);}//出栈void Pop_LinkStack(Stack stack){if (NULL == stack){return;}struct LinkStack* pstack = (struct LinkStack*)stack;if (pstack->size == 0){return;}struct LinkNode* node = pstack->head.next;pstack->head.next = node->next;--(pstack->size);}//获取栈顶void* Top_LinkStack(Stack stack){if (NULL == stack){return NULL;}struct LinkStack* pstack = (struct LinkStack*)stack;if (pstack->size == 0){return NULL;}return pstack->head.next;}int Size_Link(Stack stack){if (NULL == stack){return -1;}struct LinkStack* pstack = (struct LinkStack*)stack;return pstack->size;}//销毁栈void Destroy_LinkStack(Stack stack){if (NULL == stack){return;}free(stack);stack = NULL;}//栈是否为空int isEmpty(Stack stack){if (NULL == stack){return 0;}struct LinkStack* st = (struct LinkStack*)stack;//if(st->size==0)//    return 1;return st->size==0;}//获取栈的大小int Size_LinkStack(Stack stack){if (NULL == stack){return -1;}struct LinkStack* st = (struct LinkStack*)stack;return st->size;}
http://www.lbrq.cn/news/2704141.html

相关文章:

  • 抵扣发票在哪个网站做seo全称英文怎么说
  • 视频网站用php做seo网站培训班
  • 南昌网站建设设计磁力天堂最新版地址
  • 培训怎么样网页设计搜索引擎关键词优化方案
  • 德宏企业网站建设公司6网络搜索优化
  • 天元建设集团有限公司财务分析郑州seo排名公司
  • 网站设计与建设的公司欧洲站fba
  • 成都定制网站建设营销qq下载
  • 网站建设计划书查网站权重
  • 做基网站外贸seo
  • 个人网站设计风格杭州龙席网络seo
  • 网站的标题可以改吗b站引流推广网站
  • 烟台网站建设的方法有哪些百度授权代理商
  • 职业病院网站建设线上销售水果营销方案
  • 拖拽网站关键词挖掘长尾词工具
  • 孙俪做的网站广告买卖交易平台
  • 彩票网站的表格是如何做的百度竞价推广怎么样才有效果
  • 湘潭做网站公司互联网广告代理
  • 廊坊做网站哪家好色盲悖论
  • asp.net做电商网站页面设计seo岗位培训
  • 茂名放心营销网站开发海南百度推广运营中心
  • 哪里找需要网站建设的网站建设的技术支持
  • 如何加强精神文明网站建设内容凡科网
  • 使用flash做网站seo北京公司
  • 网站建设重要新拉新推广怎么做代理
  • 网站建设管理员角色设置营销网站建设的因素
  • 宿迁明远建设有限公司网站河北百度推广客服电话
  • 专门做推广的网站家居seo整站优化方案
  • 定制手机微网站地推接单平台
  • h5响应式集团网站推荐域名ip查询入口
  • _init__.py的作用
  • C# 基于halcon的视觉工作流-章29-边缘提取-亚像素
  • Flutter GridView的基本使用
  • 高性能Web服务器
  • 【华为机试】648. 单词替换
  • 重学React(五):脱围机制一