【PAT甲级】1099 Build A Binary Search Tree (30分)

解题过程的小记录,如有错误欢迎指出。

难度:四星(用到了BST中序是递增的特性,做完上一题有了思路再做这一题就不难了)

题目分析

给出二叉树的结构,要求填入数据满足二叉搜查树(对于每个结点,左子小于根结点,右子大于等于根结点),填入数据后输出它的层次遍历

注意点

采用静态二叉树时要注意结束标志是什么,本题是-1代表NULL

我的解题过程

思路

  1. 用静态二叉树来保存结构
  2. BST有中序遍历是递增的特性,所以对已经构造好的树进行中序遍历,按照递增插入序列
  3. 层次遍历输出这棵树

bug

输入数据语句打错了一个地方,后发现

代码

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>

using namespace std;

int n, k = 0, cnt = 0;
vector<int> d;

struct node {
	int data;
	int lchild, rchild;
}Node[105];

void inorder(int index) {
	if (index == -1) return;
	inorder(Node[index].lchild);
	Node[index].data = d[k++];
	inorder(Node[index].rchild);
}

void layerorder(int index) {
	if (index == -1) return;
	queue<int> q;
	q.push(index);
	while (!q.empty()) {
		int now = q.front();
		q.pop();
		printf("%d", Node[now].data);
		cnt++;
		if (cnt != n) printf(" ");
		if (Node[now].lchild != -1) q.push(Node[now].lchild);
		if (Node[now].rchild != -1) q.push(Node[now].rchild);
	}
}

int main()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &Node[i].lchild, &Node[i].rchild);
	}
	d.resize(n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &d[i]);
	}
	sort(d.begin(), d.end());
	inorder(0);
	layerorder(0);
    return 0;
}

dalao的代码

全部代码因版权原因不放出来,大家可以自行去柳神博客购买或者参考晴神的上机笔记~

借鉴点

本题参考自己代码即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值