zoukankan      html  css  js  c++  java
  • 6.3.2层次遍历 二叉树【算法入门经典】【结构体指针】

    运行效果图 结构体指针实现

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 10000
    int failed,n,v,ans[N];
    char s[N];//保存读入结点 
    typedef struct Node//结点类型 
    {
    	int flag;//是否被赋值过 
    	int number;//结点值 
    	struct Node *left,*right;//左右子结点 
    }Node;
    Node *root,*q[N];
    Node* newnode()
    {
    	Node *u;
    	u = (Node*)malloc(sizeof(Node));
    	if(u!=NULL)
    	{
    		u->flag = 0; 
    		u->left = u->right = NULL;//初始时没有左右儿子 
    	}
    	return u;
    }
    int addnode(int v,char *str)
    {
    	int l = strlen(str);
    	Node *u = root;
    	for(int i = 0; i < l; i ++)//根结点开始往下走 
    	{
    		if(str[i] == 'L')
    		{
    			if(u->left == NULL)
    				u->left = newnode();//结点不存在,建立新结点 
    			u = u->left ;//往左走 
    		}
    		else if(str[i] == 'R')
    		{
    			if(u->right == NULL)
    				u->right = newnode();
    			u = u->right ;
    		}
    	}
    	if(u->flag)//如果最后结束的括号也被标记为用过了,说明输入有误 
    		failed = 1;
    	u->number = v;
    	u->flag = 1;//标记为已经用过 
    	return 1;
    }
    void read_input()
    {
    	root = newnode();//创建根结点 
    	failed = 0;//记录输入是否有误 
    	while(scanf("%s",s),strcmp(s,"()")!=0)
    	{
    		sscanf(&s[1],"%d",&v);//读入结点值 
    		addnode(v,strchr(s,',')+1);//查找逗号,然后插入结点 
    	}
    	return ;
    }
    int bfs()
    {
    	int front = 0,rear = 1,v;
    	q[0] = root;//初始时只有一个根结点 
    	n = 0;
    	while(front < rear)
    	{
    		Node* u =  q[front++]; 
    		if(!u->flag)
    			return 0;//有结点没有被赋值过,表明输入有误 
    		ans[n++] = u->number ;//增加到输出序列尾部 
    		if(u->left != NULL)
    			q[rear++] = u->left ;//如果有,把左儿子放进队列 
    		if(u->right != NULL)
    			q[rear++] = u->right ;//把右儿子放进队列 
    	}
    	return 1;
    }
    
    int main()
    {
    	read_input();
    	if(failed||!bfs())
    		printf("-1
    ");
    	else
    	{
    		for(int i = 0; i < n-1; i ++)
    			printf("%d ",ans[i]);
    		printf("%d
    ",ans[n-1]);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Python 集合
    Python 文字列
    JUNIT5(maven配置)
    Javascript严格模式
    移动互联测试
    Python的基础知识
    Linux系统下发件oa环境
    禅道的使用
    Linux系统的安装过程
    Oracle基础知识
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7811204.html
Copyright © 2011-2022 走看看