二叉树----7-3 列出叶结点

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶结点。

输入格式:

首先第一行给出一个正整数 n(≤10),为树中结点总数。树中的结点从 0 到 n−1 编号。随后 n 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。

输出格式:

在一行中按规定顺序输出叶结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

输出样例:

4 1 5

代码演示:

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    int data;
    struct node*left;
    struct node*right;
}Node;
typedef struct que{
    Node *data[1000];
    int front;
    int rear;
}queue;

int Findhead(char **node,int n){
    int test[n];
    for(int i=0;i<n;i++){
        test[i] = 0;
    }
    for(int i=0;i<n;i++){
        if(node[i][0] != '-'){
            test[(node[i][0]-'0')] = 1;
        }
        if(node[i][2] != '-'){
            test[(node[i][2]-'0')] = 1;
        }
    }
    int flag;
    for(int i=0;i<n;i++){
        if(test[i] == 0){
        	flag = i;
            break;
        }
    }
    return flag;
}

Node *createtree(int head,Node *root,char **node,int n){
    
    
    root = (Node*)malloc(sizeof(Node));
    root->data = head;
    root->left = NULL;
    root->right = NULL;
    
    if(node[head][0]!='-'){
    root->left = createtree(node[head][0]-'0',root->left,node,n);
	}
	if(node[head][2]!='-'){
	root->right = createtree(node[head][2]-'0',root->left,node,n);
	}
	
	return root;
    
}
void levelprintleave(Node *root)
{
 	int flag = 0;
    if(root){
        queue *Q = (queue*)malloc(sizeof(queue));
        Q->front = -1;
        Q->rear = -1;
        Q->data[++Q->rear] = root;//初始化
        while(Q->front<Q->rear){

            Node *item = Q->data[++Q->front];//留值
			
			if(!item->left&&!item->right){
				if(flag==0){
					flag = 1;
					printf("%d",item->data);
				}else
					printf(" %d",item->data);//访问
			}
            if(item->left){
                Q->data[++Q->rear] = item->left;
            }
            if(item->right){
               Q->data[++Q->rear] = item->right;
            }

        }
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    
    char **node = (char**)malloc(sizeof(char*)*n);
	getchar();
	
    for(int i=0;i<n;i++){
    	node[i] = (char *)malloc(sizeof(char)*4);
        gets(node[i]);
    }

    int head = Findhead(node,n);

    Node *root = createtree(head,root,node,n);

    levelprintleave(root);
    
    return 0;
}

相关推荐

  1. ----7-3 列出

    2024-06-09 07:42:04       7 阅读
  2. 6-3 C. DS——之父子

    2024-06-09 07:42:04       33 阅读
  3. 7-2 求的叶子个数

    2024-06-09 07:42:04       35 阅读
  4. ---- 所有点数

    2024-06-09 07:42:04       29 阅读
  5. 编写递归算法,计算T中叶子的数目。

    2024-06-09 07:42:04       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-09 07:42:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-09 07:42:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-09 07:42:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-09 07:42:04       18 阅读

热门阅读

  1. bat指令踩坑记录

    2024-06-09 07:42:04       8 阅读
  2. Web Dart前端:探索、挑战与未来展望

    2024-06-09 07:42:04       10 阅读
  3. 计算机视觉中的low-level与 high-level任务

    2024-06-09 07:42:04       10 阅读
  4. python记录之字符串

    2024-06-09 07:42:04       9 阅读
  5. Playwright 这个强大的自动化测试工具

    2024-06-09 07:42:04       9 阅读
  6. 安装 hbase(伪分布式)

    2024-06-09 07:42:04       7 阅读
  7. 密码学基本概念

    2024-06-09 07:42:04       8 阅读
  8. Python为项目中添加上彩色日志

    2024-06-09 07:42:04       8 阅读
  9. perl use HTTP::Server::Simple 轻量级 http server

    2024-06-09 07:42:04       9 阅读
  10. 面试 Redis 八股文十问十答第二期

    2024-06-09 07:42:04       12 阅读
  11. ASP.NET Core 中使用基本消息的 RabbitMQ 消费者

    2024-06-09 07:42:04       6 阅读
  12. 第十一章:净世山的考验

    2024-06-09 07:42:04       7 阅读