[数据结构教程第二十四课遍历二叉树]教学目的: 掌握二叉树遍历的三种方法教学重点: 二叉树的遍历算法教学难点: 中序与后序遍历的非递归算法授课内容:一、复习二叉树的定义二叉树由三个基本单元组成:根结点、左...+阅读
#include /*如发现bug请给我留言*/
#include
#include
#define LEN sizeof(struct node)
struct node
{
char data;
struct node *lchild,*rchild;
};
struct node *build()
{
struct node *stack[20]={NULL},*root,*temp,*p;
char c;
int i=-1;
c=getch();
if(c=='0')
return NULL;
root=p=(struct node *)malloc(LEN);
p->data=c;
c=getch();
while(1)
{
while(c!='0')
{
stack[++i]=p;
p=(struct node *)malloc(LEN);
p->data=c;
stack[i]->lchild=p;
c=getch();
}
p->lchild=NULL;
c=getch();
while(c=='0'&i>=0)
{
p->rchild=NULL;
p=stack[i--];
c=getch();
}
if(c!='0')
{
temp=(struct node *)malloc(LEN);
p->rchild=temp;
temp->data=c;
p=temp;
c=getch();
}
else if(c=='0'&i<0)
return root;
}
}
void output(struct node *head) /*中序输入出二叉树*/
{
struct node *stack[20],*p1=head;
int i=-1;
char c;
if(head==NULL)
return;
while(1)
{
while(p1->lchild!=NULL)
{
stack[++i]=p1;
p1=p1->lchild;
}
printf("%c",p1->data);
while(p1->rchild==NULL&i>=0)
{
p1=stack[i--];
printf("%c",p1->data);
}
if(p1->rchild!=NULL)
{
p1=p1->rchild;
}
else if(p1->rchild==NULL&i<0)
break;
}
}
int main(int argc, char *argv[])
{
struct node *head;
head=build();
output(head);
printf("\n");
return 0;
}
以下为关联文档:
非递归方式遍历目录及其子目录的文件在编程设计开发中,搜索一个目录及其子目录下所有的文件是比较常见的需求,而采用递归方式进行搜索则是一个非常直观的算法。但是,由于目录中文件数量往往比较大,而每个文件名又往...
当函数发生递归调用时同一个局部变量在不同程度上可以同时存在你在源代码中看到的一个局部变量,其实在函数递归过程中是存在很多副本的。 比如,你在源代码中看到一个一个局部变量 a 其实在函数递归掉用的时候,每调用一次都会在所调用函数的...
n皇后问题递归算法c: #include <stdio.h> #include <stdlib.h> int result=0; void queen(int *chess,int len,int n){ if(n==len){ result++; }else{ int flag=0; for(int i=0;i<len;i++){ f...
VB如何遍历文件夹下所有文件高手请指教窗体上有四个控件,命令按钮command1。列表框list1。驱动器列表Drive1。文件夹列表Dir1。 驱动器和文件夹列表是用来选择你想要搜索的文件夹。 程序运行时选中你想要搜索的文...
php如何将数组遍历出来的结果相加请教高手方法1,累加 <?php $arr=array(1,2,3,4); $sum=0;//设变量 foreach($arr as $value){ echo $value.'<br>'; $sum+=$value;//累加 } echo $sum;//显示 方法2,直接求 <?php $arr=arr...