4种树

1004. Counting Leaves (30)-PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
1053. Path of Equal Weight (30)-PAT甲级真题(树的遍历)
1079. Total Sales of Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
1090. Highest Price in Supply Chain (25)-PAT甲级真题
1094. The Largest Generation (25)-PAT甲级真题(bfs,dfs,树的遍历)
1106. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)

二叉树

1020. Tree Traversals (25)-PAT甲级真题
1102. Invert a Binary Tree (25)-PAT甲级真题
1119. Pre- and Post-order Traversals (30)-PAT甲级真题(前序后序转中序)

排序二叉树

1043. Is It a Binary Search Tree (25)-PAT甲级真题
1064. Complete Binary Search Tree (30)-PAT甲级真题(树的层序遍历)
1099. Build A Binary Search Tree (30)-PAT甲级真题
1115. Counting Nodes in a BST (30)-PAT甲级真题(二叉树的遍历,dfs)

平衡二叉树

1066. Root of AVL Tree (25)-PAT甲级真题

分析

pat上关于树的题目一共14题,出题几乎全部围绕树的建立和遍历这两个点展开。
从总体来看,往往呈现出一个点简单一个点难。从这14道题目来看,需要掌握的
有:树的静态建立, 树的遍历。
	二叉树的递归和分治建立,二叉树的静态建立。二叉树的递归遍历,非递归遍历。
	二叉排序树的插入,建立,遍历。
	平衡二叉树的插入和建立。
	围绕树的遍历展开的一些常见提问,如路径,最大权值,路径长度,节点个数,
	带权路径长度。

P1004

题目大意:给你一颗树
问: 每一层的叶子结点个数
分析: 主要考察树的静态建立,树的遍历

P1053

题目大意:给你一棵树,以及每个结点的权值
问: 让你找到从根结点到叶子结点的路径权和等于某个指定值的路径。
并将这些路径从大到小排序。
分析:考察树的静态建立,树的遍历。
	  路径的保存可以定义pre数组,或者定义全局变量path。推荐采用逆向存储法的
	  pre数组。

p1079

	题目大意:	给一棵树,在树根出货物的价格为p,然后从根结点开始每往下走
	一层,该层的货物价格将会在父亲结点的价格上增加r%,给出每个叶结点的货物
	量,求他们的价格之和~(摘自柳神)
	
	分析: 供应商,经销商,零售商模型。主要考察树的静态建立,以及树的高度。
	可以定义一个height数组,这样在走到叶子结点时,根据height来计算叶子结点
	处的价格。统计所有叶子结点价格总和。

p1090

	题目大意:给一棵树,在树根出货物的价格为p,然后每往下走一层,价格增加
	r%,求所有叶子结点的最高价格,以及这个价格的叶子结点个数。(摘自柳神)
	
	分析:  供应商,经销商,零售商模型。主要考察树的静态建立和树的遍历。
	树的高度,在bfs遍历下可以定义一个height数组;在dfs遍历下可以定义一
	个height形参。

p1094

	题目大意:给你一棵树,N个结点,M个非叶子结点。接下来就是M行父结点-子结
	点关系。建立这棵树。
	
	问: 这颗树哪一层的结点个数最多? 输出这一层,以及这一层结点个数。
	分析: 主要考察树的静态建立以及树的遍历。

p1106

	题目大意: 给你一颗树,根结点给出价格p和费率r, 从往下走一层价格增加r%
	
	问: 找到价格最低的叶子结点, 以及提供这个价格的叶子结点总个数。
	
	分析: 供应者,经销商,零售商模型。这个题目出了3次。主要考察树的静态
	建立和树的遍历。

p1020

	题目大意: 给你一颗二叉树的后序和中序遍历序列, 让你输出这颗二叉树的
	层序遍历序列。
	
	分析:经典老问题,不会做只能说明你太lazy了,本题关键点在于递归和分治法
	建立二叉树。后面的层次遍历是一个老生常谈的话题。另外: 后序遍历遍历
	告诉你哪个是根? 通过已知的根和中序遍历告诉你左子树和右子树是谁?
	细心的读者可以发现:这里建立树的方式和之前不一样,文章末尾会有一个总结
	包含了pat已经出现的建树的几种方式。
	
	不错的题

p1102

	题目大意:	给你一颗二叉树,反转这颗二叉树,输出这颗反转二叉树的层序
	和中序遍历序列。
	分析: 经典老问题。首先不要混淆关键字和左右孩子指针,这是两个概念。
	反转二叉树只需记住:后序遍历,交换左右孩子指针即可! 另外这里考察二叉
	树的静态建立。
	
	不错的题

p1119

题目大意:	给出一棵树的结点个数n,以及它的前序遍历和后序遍历,输出它的
中序遍历,如果中序遍历不唯一就输出No,且输出其中一个中序即可,如果中序
遍历唯一就输出Yes,并输出它的中序。

分析: 拿到这样一道题你可能会很疑惑,因为先序加后序并不能确定一颗二叉树。
同时题目要求可以知道,代码里要体现如何区别唯一? 为什么会不唯一? 因为
先序遍历去掉根结点后头一个结点就是左子树或者右子树的根。而后序遍历去掉尾巴
后最后一个节点要么是左子树或者右子树的根,如果这两个结点重合,(思考一下,
什么情况会重合?单支树),也就意味着子树的序列即可放在左子树上,也可以放在右
子树上, 这就造成了二叉树的不唯一。

个人认为:这是pat上出的关于二叉树最好的两道题之一。

p1043

	题目大意:给你一颗二叉树或者其镜像二叉树的先序序列
	
	问: 判断这个序列是二叉树还是镜像二叉树, 之后输出这个树的后序序列
	
	分析: 首先给你不管是二叉树或者是镜像二叉树的先序序列,就能够建立起
	对应的一棵BST,而且都是一样的。(思考一下,为什么一样),之后通过二叉树
	的或者镜像二叉树的先序序列和输入序列哪一个一样就可以区分到底是BST
	还是BST的镜像,之后输出对应的BST或者BST镜像的后序遍历即可!
	
	还不错的题

P1064

题目大意:任意给你一组序列,让你输出又是BST又是完全二叉树的层次遍历序列

分析: 一个结论是BST的中序遍历是有序的,另外完全二叉树决定了这颗BST的形状
。所以可以采用分治和递归法,首先根据完全二叉树左子树的个数去确定根是谁?
然后根据这个根划分左右子树序列,注意空节点和单个结点需要特判。

题外话: 看到这道题居然和有一道也是利用中序遍历有序结论的一道题混淆了

个人认为这是pat上树这一块出得最好的一道题。

p1099

题目大意: 给你一颗BST,以及告诉你每个结点左右孩子是谁, 再给你任意一组序列,
让你建立这颗BST,并输出层次遍历序列。

分析:利用中序遍历有序这个结论。刚刚上面有提到过,这道题我和p1064混淆了。
可以看到都是利用这个结论,但是建树的过程不一样。因为p1064那个树的形状
隐性给你,但是没有给出具体的每个结点的左右孩子关系,所以用的是分治和递归
法。

p1115

题目大意:给你一组输入序列,建立BST,之后输出最后两层的结点个数和它们的和。
	
分析:通过输入序列建立BST, 之后采用BFS或者DFS统计每个高度的结点个数,
在遍历过程中定义max_height这个变量,最后输出结果。

p1066

题目大意: 给你一组输入序列,建立AVL, 输出根结点即可。

分析: pat上平衡二叉树最多考到插入,建立,遍历。删除不考。要知道
平衡二叉树的一个结构体,8个函数。要知道平衡二叉树是通过递归建立起来的。

小结

做了树这一块14道题,实际上树可以说是数据结构中应用最广的的一种数据结构。
不单单树只是一种数据结构,树在查找和排序上也有很多体现,生活和学习中也常常
遇到。比如思维导图。递归也体现了树的思想。
一,pat上建立各种树的方式:
	1, 静态建立树, 6道
	2, 静态建立二叉树,1道, p1102
	3, 	分治和递归建立二叉树 , 3道,p1020, p1119, p1064
	4, 	显性给出排序二叉树的形状,利用中序遍历有序建树,1道, p1099
	5, 	输入序列建立BST, 2道, p1115, p1043
	6,	 输入序列,建立平衡二叉树,1道, p1066

二,镜像二叉树,也是pat喜欢考察的点。
	思考:
		为什么没有二叉树的动态建立呢? pat中一般直接给你父子结点关系。
		BST或者BST镜像,无论哪一个先序当做输入序列建立BST,为什么会一样?大概左子树和右子树互不影响。
	树的4种基本操作: 插入,建立,查找,删除 
	最核心的: 建立,遍历
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值