前序遍历和中序遍历唯一确定一颗二叉树

news/2024/11/23 5:53:24/

---恢复内容开始---

问题描述

如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一颗二叉树。

基本要求

已知一棵二叉树的前序序列和中序序列,试设计完成下列任务的一个算法:

(1).构造一颗二叉树

(2).证明构造正确(即分拨儿以前序和中序遍历该树,将得到的结果

与给出的序列进行比较)

(3).对该二叉树进行后序遍历,输出后序遍历序列

(4).用凹入法输出该二叉树

测试数据

前序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC                                                                             

 

代码思路

1.确定树的根节点,树根是当前树中所有元素在前序遍历中最先出现的元素。

2.求解树的子树,找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都为空,则根节点已经为叶子节点。

3.递归求解树,将左子树和右子树分别看成一棵二叉树,重复1、2、3步,直到所有的节点完成定位。

 

源代码

/*

http://www.ppmy.cn/news/695111.html

相关文章

删除一颗二叉树

package tree;public class DeleteBT {/*** 删除一颗二叉树* param args*/public static TreeNode delete(TreeNode root){if(rootnull) return root;root.left delete(root.left);root.right delete(root.right);return null;}public static void main(String[] args) {Tree…

题目: 打印输出上下左右对称的,第一行一颗星,第二行三颗星,第三行五颗星,第四行七颗星,第五行五颗星,第六行三颗星,第七行一颗星

题目: 打印输出 * *** ***** ******* ***** *** * /* 分析: 前4行,行数1 2 3 4 i空格数3 2 1 0 4-i星数1 3 5 7 2*i-1 后3行,行数1 2 3 i空格数1 2 3 i星数5 3 1 7-2*i*/ class Test14 {public static void main(String[] a…

小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖

小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装…

Python---堆里有16颗豆子,有两个玩家依次取豆

题目: 堆里有 16 颗豆子,有两个玩家(假设一个玩家是电脑) 。每个玩家都可以从堆中的 16 颗豆子中取出 1 颗,2 颗或者 3 颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最…

给定任何两种遍历序列能否确定唯一一颗二叉树

给定任何两种遍历序列能否确定唯一一颗二叉树 我们知道确定一颗二叉树,必须要确定它的中序遍历,再加上层次遍历,后序遍历,前序遍历三个中间的一种。为什么这样说呢接下来可以验证一下,这里强烈推荐一下生成二叉树的网…

复制一颗二叉树(java语言)

复制一颗二叉树(java语言) 在一棵二叉链表表示的二叉树中,复制一颗二叉树(利用java编程语言) 我的求解方法:首先创建一个泛型的数组,目的是为了存放二叉树(新复制)的标明空子树的先…

判定两颗二叉树是否相同

题目描述: 给定两个二叉树,编写一个函数来校验它们是否相同。如果两个树在结构上相同,并且结点具有相同的值,则认为它们是相同的。 算法思路: 利用深度优先搜索,如果两个二叉树都为空,则两个…

【面试智力题】一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,怎样拿到最大的一颗?

问题描述 一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗? 解答思路 开放性试题,没有固定答案 1.37%法…