检查一个数组是否可能是一棵二叉查询树后序遍历的结果 [No. 6]

本文介绍了如何通过后序遍历数组来验证其是否能表示一棵二叉搜索树。通过找到数组中的分界点并检查左右两部分的元素范围,实现递归判断。

问题:

给一个数组,检查它是否可能是一棵二叉查询树后序遍历的结果。换句话说,是否存在一棵二叉查询树,对它进行后序遍历后,得到的数组和给定的数组完全一样。


比如,对上面这个二叉查询树后序遍历后,得到的数组是:[1, 4, 7, 6, 3, 13, 14, 10, 8]。

思路:

因为二叉树后序遍历的时候,先左后右然后中间。所以,数组的最后一个一定是整个二叉查询树的根(比如 8),而且,数组前一部分比数组最后一个值(也就是二叉查询树的根)小,因为它们是根的左子树部分。数组剩余部分,是根的右子树部分。而且,在剩余部分里,所有的值都必须比根要大。这样,我们可以把原来的数组分成两个部分,然后每一个部分可以进行递归判断,直到数组的长度小于等于2。(因为当长度小于等于2时,什么样的情况都是可以的)。

我们先把给定的数组分成两个部分,即我们需要先找到数组的分界点。代码如下:

/**
	 * 
	 * @param array  the input array	
	 * @param begin  the starting index of the array
	 * @param end    the ending index of the array
	 * @return   the turning point of the array, where the left part of turning point is smaller than array[end], the right 
	 *           part of the turning point is larger than array[end].
	 */
	public int turningPoint(int[] array, int begin, int end) {
		
		int tp = -1;
		for (int i = begin; i < end; i++) {
			if (array[i] > array[end]) {
				tp = i;
				break;
			}
		}
		
		return tp;
	}

找到分界点后,我们还要判断从分界点开始,到数组末,是否所有的值都比数组的最后一个值(也就是根)大,否则,这样的数组不是一个二叉查询树的后序遍历。代码如下:

//check whether all the elements from strat are larger than array[end]
	public boolean checkValid(int[] array, int start, int end) {
		for (int i = start; i < end; i++) {
			if (array[i] < array[end]) return false;
		}
		return true;
	}

有了上面两个方法,我们就可以把递归写出来了,代码如下:


// the main method to check whether the array is identical to a BST's post order array
	public boolean isPostOrder(int[] array, int begin, int end) {
		// the exit
		if ((end - begin + 1) <= 2) return true;
		//get the turning point
		int turningPoint = turningPoint(array, begin, end);
		boolean result = checkValid(array, turningPoint, end);  //check whether the right part of the array is valid
		if (result == false) {
			return false;
		}
		// recursion
		return isPostOrder(array, begin, turningPoint - 1) && isPostOrder(array, turningPoint, end - 1);
	}

二叉树的形态 由 3 个结点可以构造出 ▁▁▁▁▁ 种不同形态的二叉树。 A. 2 B. 3 C. 4 D. 5 分数 1 作者 严蔚敏 单位 清华大学 若一棵非空二叉树遍历后序遍历序列正好相反,则该二叉树 ▁▁▁▁▁ 。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D.任意二叉树 分数 1 作者 严蔚敏 单位 清华大学 二叉树的高度 若节点为高度1,一棵具有 1025 个结点的二叉树的高度为 ▁▁▁▁▁ 。 A. 10 B. 11 C. 11~1025 之间 D. 10~1024 之间 分数 3 作者 考研真题 单位 浙江大学 对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是: A. 56 B. 57 C. 58 D. 60 分数 2 作者 王俊玲 单位 集美大学 度为3的树中第4层上至多有( )个结点。 A. 12 B. 81 C. 27 D. 8 分数 2 作者 王俊玲 单位 集美大学 如果一个完全二叉树最底下一层为第六层(为第一层)且该层共有8个叶结点,那么该完全二叉树共有多少个结点? A. 31 B. 39 C. 63 D. 71 分数 2 作者 王俊玲 单位 集美大学 若有一二叉树的总结点数为98,只有一个儿子的结点数为48,则该树的叶结点数是多少? A. 25 B. 50 C. 不确定 D. 这样的树不存在 分数 2 作者 王俊玲 单位 集美大学 对于二叉树,如果其中序遍历结果前序遍历结果一样,那么可以断定该二叉树: A. 是完全二叉树 B. 所有结点都没有左儿子 C. 所有结点都没有右儿子 D. 这样的树不存在 分数 2 作者 王俊玲 单位 集美大学 已知一二叉树的后序和中序遍历结果分别是FDEBGCA 和FDBEACG,那么该二叉树的前序遍历结果是什么? A. ABDFECG B. ABDEFCG C. ABDFEGC D. ABCDEFG 分数 2 作者 王俊玲 单位 集美大学 在上题的搜索树中删除结点1,那么删除后该搜索树的后序遍历结果是: A. 243765 B. 432765 C. 234567 D. 765432 分数 2 作者 王俊玲 单位 集美大学 若一AVL树的结点数是21,则该树的高度至多是多少?注:只有一个节点的树高度为0 A. 4 B. 5 C. 6 D. 7 分数 2 作者 王俊玲 单位 集美大学 下列序列中哪个是最小堆? A. 2, 55, 52, 72, 28, 98, 71 B. 2, 28, 71, 72, 55, 98, 52 C. 2, 28, 52, 72, 55, 98, 71 D. 28, 2, 71, 72, 55, 98, 52 分数 2 作者 王俊玲 单位 集美大学 在最大堆 {97,76,65,50,49,13,27}中插入83后,该最大堆为: A. {97,76,65,83,49,13,27,50} B. {97,83,65,76,49,13,27,50} C. {97,83,65,76,50,13,27,49} D. {97,83,65,76,49,50,13,27} 分数 2 作者 王俊玲 单位 集美大学 对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的: A. 二叉搜索树(查找树)高度大于等于最小堆高度 B. 对该二叉搜索树(查找树)进行中序遍历可得到从小到大的序列 C. 从最小堆节点到其任何叶结点的路径上的结点值构成从小到大的序列 D. 对该最小堆进行按层序(level order)遍历可得到从小到大的序列 分数 2 作者 王俊玲 单位 集美大学 为五个使用频率不同的字符设计哈夫曼编码,下列方案中哪个不可能是哈夫曼编码? A. 00,100,101,110,111 B. 000,001,01,10,11 C. 0000,0001,001,01,1 D. 000,001,010,011,1 分数 2 作者 王俊玲 单位 集美大学 已知a、b两个元素均是所在集合的结点,且分别位于数组分量3和2位置上,其parent值分别为-3,-2。问:将这两个集合按集合大小合并后,a和b的parent值分别是多少? A. -5,2 B. -5,3 C. -3,3 D. 2,-2 分数 2 作者 王东 单位 贵州师范学院 在下列存储形式中,( )不是树的存储形式。 A. 双亲表示法 B. 孩子链表表示法 C. 孩子兄弟表示法 D. 顺序存储表示法 分数 2 作者 王东 单位 贵州师范学院 引入二叉线索树的目的是( )。 A. 加快查找结点的前驱或后继的速度 B. 为了能在二叉树中方便的进行插入删除 C. 为了能方便的找到双亲 D. 使二叉树的遍历结果唯一 分数 2 作者 王东 单位 贵州师范学院 以下说法中,正确的是( )。 A. 在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点 B. 任何一棵二叉树,叶子结点个数为度为2的结点数减1,即n0=n2-1 C. 完全二叉树不适合顺序存储结构,只有满二叉树适合顺序存储结构 D. 结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子的编号为2i 分数 2 作者 王东 单位 贵州师范学院 若一棵深度为6的完全二叉树的第6层有3个叶子结点,则该二叉树共有( )个叶子结点。 A. 17 B. 18 C. 19 D. 20 分数 2 作者 王东 单位 贵州师范学院 若一棵二叉树有126个结点,在第7层(结点在第1层)至多有( )个结点。 A. 32 B. 64 C. 63 D. 不存在第7层 分数 2 作者 王东 单位 贵州师范学院 在一棵完全二叉树中,其的序号为1,(  )可判定序号为 p和q 的两个结点是否在同一层。 A. ⌊log 2 ​ p⌋=⌊log 2 ​ q⌋ B. log 2 ​ p=log 2 ​ q C. ⌊log 2 ​ p⌋+1=⌊log 2 ​ q⌋ D. ⌊log 2 ​ p⌋=⌊log 2 ​ q⌋+1 分数 2 作者 王东 单位 贵州师范学院 在任何一棵二叉树中,若结点a有左孩子b、右孩子c,则在结点的序列、中序序列后序序列中,( )。 A. 结点b一定在结点a的前面 B. 结点a一定在结点c的前面 C. 结点b一定在结点c的前面 D. 结点a一定在结点b的前面 分数 2 作者 YJ 单位 西南石油大学 在完全二叉树中,若一个结点是叶结点,则它没( )。 A. 左子结点 B. 右子结点 C. 左子结点和右子结点 D. 左子结点,右子结点和兄弟结点 分数 2 作者 YJ 单位 西南石油大学 由3 个结点可以构造出多少种不同的二叉树( ) A. 2 B. 3 C. 4 D. 5 分数 2 作者 YJ 单位 西南石油大学 下面几个符号串编码集合中,不是前缀编码的是( )。 A. {0,10,110,1111} B. {11,10,001,101,0001} C. {00,010,0110,1000} D. {b,c,aa,ac,aba,abb,abc} 分数 2 作者 YJ 单位 西南石油大学 一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是( )。 A. A[2i](2i<=n) B. A[2i+1](2i+1<=n) C. A[i-2] D. 条件不充分,无法确定 分数 2 作者 YJ 单位 西南石油大学 在二叉树的二叉链表结构中,针p所结点为叶子结点的条件是( )。 A. p=NULL B. p->lchild==NULL && p->rchlid==NULL C. p->lchild==NULL D. p->rchlid==NULL 分数 2 作者 YJ 单位 西南石油大学 深度为k的完全二叉树至少有(1)个结点,至多有(2)个结点。 A. (1)2k-1 (2)2k-1 B. (1)2k (2)2 k -1 C. (1)2 k (2)2 k +1 D. (1)2 k−1 (2)2 k -1 分数 2 作者 YJ 单位 西南石油大学 高度为8的完全二叉树至少有( )个叶子结点。 A. 128 B. 63 C. 64 D. 32 分数 2 作者 YJ 单位 西南石油大学 一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是( )。 A. 2 k−2 B. 2 k−2 +1 C. 2 k−1 +1 D. 2 k−1 分数 2 作者 YJ 单位 西南石油大学 二叉树的序列和中序序列相同的条件是( )。 A. 任何结点至多只有左子女的二叉树 B. 任何结点至多只有右子女的二叉树 C. 右子树为空 D. 左子树为空 分数 2 作者 考研真题 单位 浙江大学 给定平衡二叉树如下图所示,插入关键字 23 后,中的关键字是: t1.png A. 16 B. 20 C. 23 D. 25 分数 2 作者 考研真题 单位 浙江大学 将关键字 6、9、1、5、8、4、7 依次插入到初始为空的大堆 H 中,得到的 H 是: A. 9、8、7、6、5、4、1 B. 9、8、7、5、6、1、4 C. 9、8、7、5、6、4、1 D. 9、6、7、5、8、4、1 分数 1 作者 张泳 单位 浙大城市学院 若一棵3次树中有2个度为3的节点,1个度为2的节点,2个度为1的节点,该树一共有 ( ) 个节点 A. 5 B. 8 C. 10 D. 11 分数 1 作者 张泳 单位 浙大城市学院 以下关于二叉树的说法中正确的是( ) A. 二叉树中每个节点的度均为2 B. 二叉树中至少有一个节点的度为2 C. 二叉树中每个节点的度可以小于2 D. 二叉树中至少有一个节点 分数 1 作者 张泳 单位 浙大城市学院 一棵二叉树中有7个叶子节点和5个单分支节点,其总共有( )个节点 A. 16 B. 18 C. 12 D. 31 分数 1 作者 张泳 单位 浙大城市学院 深度为5的二叉树至多有 ( )个节点 A. 16 B. 32 C. 31 D. 10 分数 1 作者 张泳 单位 浙大城市学院 一个具有1025个节点的二叉树的高h为( ) A. 11 B. 10 C. 11~1025 D. 12~1024 分数 1 作者 张泳 单位 浙大城市学院 一棵完全二叉树中有501个叶子节点,则至少有 ( ) 个节点 A. 501 B. 502 C. 1001 D. 1002 分数 1 作者 张泳 单位 浙大城市学院 一棵高度为8的完全二叉树至少有( )叶子节点 A. 63 B. 64 C. 127 D. 128 分数 1 作者 张泳 单位 浙大城市学院 一棵满二叉树中127个节点,其中叶子节点的个数是( ) A. 63 B. 64 C. 65 D. 不确定 分数 1 作者 张泳 单位 浙大城市学院 某二叉树的遍历序列后序遍历序列正好相反,则该二叉树一定是( ) A. 空或只有一个节点 B. 完全二叉树 C. 二叉排序树 D. 高度等于其节点数 分数 1 作者 张泳 单位 浙大城市学院 一棵二叉树的遍历序列为ABCDEF,中序遍历序列为CBAEDF,则后序遍历序列为( ) A. CBEFDA B. FEDCBA C. CBEDFA D. 不确定 分数 1 作者 严蔚敏 单位 清华大学 若一棵非空二叉树 ▁▁▁▁▁,则中序遍历层次遍历序列完全相同。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D.任意二叉树 分数 1 作者 李祥 单位 湖北经济学院 若一棵非空二叉树 ▁▁▁▁▁,则中序遍历层次遍历序列正好相反。 A. 所有结点均无左孩子 B. 所有结点均无右孩子 C. 只有一个叶子结点 D.任意二叉树 分数 1 作者 李祥 单位 湖北经济学院 对一棵二叉树的结点从 1 开始顺序编号。要求每个结点的编号都小于其子树所有结点的编号,且左子树所有结点的编号都小于右子树所有结点的编号。可采用 ▁▁▁▁▁ 实现编号。 A. 遍历 B. 后序遍历 C. 中序遍历 D. 层次遍历 分数 1 作者 严蔚敏 单位 清华大学 分别按以下顺序插入结点到空二叉排序树中,▁▁▁▁▁ 其它三个序列所得到的结果不同。 A. 10, 8, 9, 6, 12, 11, 13 B. 10, 12, 11, 13, 8, 6, 9 C. 10, 6, 8, 9, 12, 11, 13 D.
最新发布
10-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值