您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 数据结构和算法题.pdf
  所属分类: C/C++
  开发工具:
  文件大小: 589kb
  下载次数: 0
  上传时间: 2019-10-07
  提 供 者: tmr***
 详细说明:部分LeetCode算法题和数据结构与算法书籍部分算法的实现,带有详细注释打印元素的祖先节点 typedef struct treenodei struct treenode *left struct treenode right; int data nt tag streenode; void getAncestor(treenode *root, int x)t /栈 nt top =-1 treenode* stack MAX_ SIZE treenodep root hile(p ii tol /向左遍历直到达到最左节点或遇到指定的节点 while(p & p->data ! xt p->tag =0 stack L++top= p Left //当遍历到指定节点时栈中的元素都是该节点的祖先节点 if(p & p->data ==xi while(top >-1)t printf( %d",stack[ top--]->data) return /如果左子树不存在x,则找到第一个右节点没有访问的节点 while(top!=-1 & stack[top]->tag== 1)t to /从该节点的右子节点开始之前的遍历 if(top!=-1)t stack[ top]->tag= 1: p= stack top]->right 表达式树转化为前缓表达式 typedef struct street char data 11 struct Btree *left, *right; REtree: /表达式树转化为中缓表达式 void btreeZexp(Btree *root, int depth)t if(! root) return, if(root->left = NULL & root->right = NULL)I printf(%c, root->dataloG) false /第一层最外面不需要括号 if(depth ! =1)0 printf((): //左子树表达式 btreeZexp(root->left, depth +1) /符号 printf( %c, root->datalO) //右节点表达式 btreeZexp(root->right, depth+1) if(depth ! 1) printf( )); 叉树的最大宽度 typedef struct treenodei struct treenode * left struct treenode right int data streenode; int getWidth(treenode *root)t if(! root) return 0 //最大宽度 int maxWidth= 0 //记录当前层宽度 int count= 0 //队列 treenode queue LMAX_SIZE] int head 1. taiL =-1 /根节点入队列 treenode p=root; queue [++head= p maxWidth=1 //分别用于记录当前层的最后节点和下一层的最后节点 treenode *thisend=p, exteNd= NULL while head taili p= queue [++tail] if(p->left ! NULL )t queue+thead p->left exteNd= p->left: count+ if(p->right ! NULL)I queue [+thead= p->right exteNd= p->right: count++; if(p== thisEnd)t thisend= exteNd maxWidth= maxWidth > count maxWidth. count count =0. return maxWidth 自底向上、从右向左遍历二叉树 typedef struct treenodei struct treenode *left: struct treenode right; int data; f treenode /自底向上,从右至左访问二叉树 void bottomZtop(treenode *root)t //栈 Lnt top treenode stack MAX-SIZE //队列 int head =-1 tail =-1 treenode* queue MAX_ SIze //根节点入队 treenode* p=root queue ++head= p //层次遍历,出队时入栈 while(head! =tail)t p= queue[++tail]: stack[++top= p if(p->left)t queue [+thead=p->left if(p->right)t queue [+head= p>right; //栈里的顺序是从下往上、从右至左的 while(top!=-1)t printf( %dt,stack[ top--]->data) 后续遍历二叉树-非递归 typedef struct treenodei struct treenode *left: struct treenode right; int data; f treenode void lrn_nonrecursion (treenode *root)t //栈 Lnt top 1 treenode* stack [MAX_SIZE //用于记录上一次访问的节点 treenode *lastvisit= NUll treenode p= root; hile( top>-1 p)i /树的最左边 if(p)i stack++top p= p->left: helsel p= stack[ top] /存在右节点且未访问过 (p->right & p->right ! lastVisit)t >right ck [++top]=p p->Left: //不存在右节点或已经访问过 lsel top printf( %d\n",p->data); lastvisit p= NULL; }
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: