[PTA] List Leaves

本文介绍了一个使用队列实现的算法,该算法能够遍历二叉树并找到所有的叶子节点。通过输入二叉树的结构,程序能够正确地识别每个叶子节点的值,并按顺序输出这些值。
#include<stdio.h>

typedef struct node Tree;
struct node
{
	int element;
	int left;
	int right;
};

Tree tree[10]; 
Tree queue[10];
int ans[10];
int cnt=0;

int front,rear;
void enqueue(Tree T)
{
	rear=(rear+1)%10;
	queue[rear]=T;
}

Tree dequeue()
{
	front=(front+1)%10;
	return queue[front];
}

void findLeaves(int root)
{
	int i;
	front=rear=0;
	enqueue(tree[root]);
	while(front!=rear){
		Tree v=dequeue();
		if(v.left!=-1)enqueue(tree[v.left]);
		if(v.right!=-1)enqueue(tree[v.right]);
		if(v.left==-1&&v.right==-1)ans[cnt++]=v.element;
	}
}

int main()
{
//	freopen("test.txt","r",stdin);
	int i,n;
	char l,r;
	int root[10];
	scanf("%d",&n);
	for(i=0;i<n;i++){
		root[i]=1;
		tree[i].element=i;
		tree[i].left=-1;
		tree[i].right=-1;
	} 
	getchar();
	for(i=0;i<n;i++){
		scanf("%c %c",&l,&r);
		getchar();
		if(l!='-'){
			root[l-'0']=0;
			tree[i].left=l-'0';
		}
		if(r!='-'){
			root[r-'0']=0;
			tree[i].right=r-'0';
		}
	}
	for(i=0;i<n;i++){
		if(root[i]){
			findLeaves(i);
			break;
		}
	}
	for(i=0;i<cnt-1;i++){
		printf("%d ",ans[i]);
	}
	printf("%d",ans[cnt-1]);
	return 0;
}

 

### PTA List 的使用方法 PTA (Programming Teaching Assistant) 平台中的 `List` 是一种线性数据结构,支持动态增长和收缩。下面将详细介绍其基本操作及其应用。 #### 创建列表 可以通过多种方式初始化一个空列表或带有初始元素的列表: ```python # 初始化为空列表 my_list = [] # 使用特定元素初始化列表 initial_elements = [1, 2, 3] another_list = list(initial_elements) # 或者直接通过方括号定义 yet_another_list = ['a', 'b', 'c'] ``` #### 添加元素 向列表中添加新项有两种主要的方法:追加到末尾或是指定位置插入。 ```python # 追加至最后一位 my_list.append('new_item') # 插入到索引为i的位置前 index_to_insert_at = 1 item_to_insert = 'inserted' my_list.insert(index_to_insert_at, item_to_insert) ``` #### 删除元素 移除列表内的项目同样提供了两种途径:依据具体值来查找并删除首次出现的那个实例;或者是基于给定的索引来定位待删节点。 ```python # 移除首个匹配的目标值 value_to_remove = 'target_value' if value_to_remove in my_list: my_list.remove(value_to_remove) # 根据索引弹出元素,默认最后一个 popped_element = my_list.pop() specific_index = 0 element_removed_by_index = my_list.pop(specific_index) ``` #### 访问与遍历 访问列表成员可通过正整数型下标实现随机存取模式下的快速检索;而迭代器则适用于顺序扫描整个序列的情况。 ```python for index, element in enumerate(my_list): print(f'Index {index}: Value is {element}') # 利用in关键字完成逐一遍览 for elem in my_list: process(elem) ``` #### 查找元素 为了高效地判断某个目标是否存在于此集合之中,可采用内置函数来进行判定。 ```python search_target = 'query_string' exists_in_list = search_target in my_list ``` #### 修改现有条目 更新已存在记录的内容只需简单地重新赋值即可达成目的。 ```python update_position = 2 updated_content = 'revised_entry' if update_position < len(my_list): my_list[update_position] = updated_content ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值