当给出两组数组,一个是原树的先序数组,另一个是中序数组,让我们重建一棵树,该如何去实现呢
我们需要找到两个数组一定相同的且是所在该数组最小的根节点,先序打印出的树,第一个出现的数一定为根节点,这样我们就找出先序数组的根节点了
想要找到中序数组的根节点其实也不难,拿着上一个找出的根节点到这个数组中一个个遍历就好了,我们把先序找出的根节点称为head,而中序找出的根节点称为find
我们来假设一个例子,假如那棵树有三个以上的节点,我们会发现先序数组的左子树肯定要比右子树先打印出来。而同样的中序数组的左子树肯定要和右子树把根节点夹在中间(前提都是左右子树都有节点的情况下)
这样我们可以设定左右子树的边界进而可以大概重塑出这棵树
写代码时要考虑到几个情况,根据我们所推出来的,第一点就是两个数组不能为空且长度必须相等,不然没有重塑的必要了。第二点在重塑树的时候,传入的左右边界,左边界一定是恒小于右边界的,而且当左右边界重合,基本可以确定这棵树只有一个节点
我们会发现在传入参数寻找find节点似乎有点太麻烦了,需要把传入的数组全都遍历一次才能得到find的位置我们可以利用一张hashmap来把传入的数组记住,方便我们后续使用
现在似乎一切都明了了,只需要构造出树的元素就可以了
利用中序数组和先序数组重建一棵树
最新推荐文章于 2024-10-01 04:50:10 发布