一般树的遍历、合并及对比

普通树的遍历、合并及对比

  • 普通树的遍历、合并及对比
    • 题目描述
    • 编程要求
    • 解题分析

日常开发过程中,我们经常会碰到这种数据结构,譬如权限树、区域层级树,系统调用链等等,今天想记录一下在某个面试题中碰到的关于树的算法题,通过对该题的解答巩固自身对于数据结构的理解,以及希望给有相同困惑的小伙伴以参考的作用。闲话不多说,我们来看题(如涉及到泄题,还请联系我予以删除)

题目描述

如下图所示,可近似看作系统的一个调用链,A为请求的网关,随着业务的不断拓展,系统调用链结构会慢慢发生变化,逐渐从形态一演化到形态二,经过相应的系统重构及链路优化后:

  • 系统E下线
  • 系统b、f、H、I上线,且系统F挂载到了新的中间业务系统b下

请对两颗树:先行分别计算高度、统计结点总数,然后进行合并处理,同时计算并输出对比结果
一般树的遍历、合并及对比_第1张图片

编程要求

写一个树合并和对比的工具类:
1. 计算树的高度、总结点数
2. 合并两颗树
3. 输出两颗树的对比结果

  • ADD : b、f、H、I
  • DELETE : E

解题分析

根据题目描述,我们发现题中所描述的数据结构为一颗普通的树,我们建立一颗普通树的数据结构并不难。根据描述,我们也不难猜出需要采用递归的方式来解题。分析一下可能存在的难点:

  • 普通树的递归遍历如何实现,遍历后如何取得最深的路径(即树高)
  • 两棵树进行合并时,如何处理两树节点不平衡问题,以及单节点合并后子节点的合并顺序问题,采用何种遍历方式更合适的问题
  • 对于两棵树的比较,假设一个节点被重复挂在了多个节点上,是否判断为新增,统计规则不同,采取的策略也有所不同
  • 生成合并树时,在判断去重时,注意去重采取的规则

附上已实现的源代码,感兴趣的同学可直接点击链接下载:普通树的遍历、合并及对比

你可能感兴趣的:(数据结构面试题)