【问题标题】:An algorithm to operate on a binary tree leaves?对二叉树叶子进行操作的算法?
【发布时间】:2017-11-17 06:44:24
【问题描述】:
我没有系统地学习uni中的数据结构和算法课程(只是看了一些书),想问一下是否有定义明确的算法可以为二叉树做以下工作:
对于给定的二叉树和一个正整数n,搜索它的叶子。如果两个相邻叶子的深度差(假设所有叶子都显示为一个数组,那么两个相邻叶子可能在两个不同的子树中)大于n。细分深度较低的叶子。递归执行此操作,直到不需要细分为止。
下图为演示,为n:
由于叶子1的深度比叶子2小2,所以需要对叶子1进行细分:
现在不需要进一步细分了。
【问题讨论】:
标签:
algorithm
tree
binary-tree
【解决方案1】:
- 初始化P为空
-
DFS 树的剩余部分,直到你在叶子中 L;如果没有人离开就退出
- 比较当前深度DL与前一叶P的深度DP ;如果 P 为空,则转到 [5]
- 如果 |DL – DP| ≥N,拆分L(当DLP)或 P(否则)
- 考虑 L 新的 P 并转到 [2]
重复此操作,直到树收敛(即,直到无法执行拆分)。